欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
新唐M452LG6AE單片機實現電機控制 原理圖和PCB程序
[打印本頁]
作者:
zhaoshuxin_wc
時間:
2017-6-22 14:42
標題:
新唐M452LG6AE單片機實現電機控制 原理圖和PCB程序
使用新唐M452LG6AE單片機實現電機控制,用到的資源有,串口,GPIO,定時器。原理圖和PCB還有源代碼如附件所示
0.png
(43.16 KB, 下載次數: 226)
下載附件
2017-6-22 19:05 上傳
0.png
(42.81 KB, 下載次數: 226)
下載附件
2017-6-22 19:06 上傳
單片機源程序如下:
#include <stdio.h>
#include <string.h>
#include "M451Series.h"
#include "core_cm4.h"
#define PLL_CLOCK 72000000
#define LED_delay 10000000/*綠燈閃亮時間間隔*/
volatile uint8_t up_flag = 0;
volatile uint8_t down_flag = 0;
volatile uint8_t middle_flag = 0;
volatile uint8_t sensor_flag = 0;
volatile uint32_t IntStatus = 0;
volatile uint8_t stop_flag = 2;
void Delay(uint32_t delayCnt)
{
uint32_t i = 0;
for(i = 0;i<delayCnt;i++);
}
void BEEP_ON(void)
{
PD7 = 1;
}
void BEEP_OFF(void)
{
PD7 = 0;
}
void BEEP_Onetime(void)
{
BEEP_ON();
Delay(10000000);
BEEP_OFF();
}
//艙門往上頂到上復位
void Gate_foreword(void)
{
while(1)
{
while(stop_flag == 1);
if(PD3 == 0)//頂到上復位開關
{
up_flag = 1;
PE0 = 0;//綠燈亮
PF2 = 1;//藍燈滅
Delay(50000000);
PE0 = 1;//綠燈滅
break;
}
PA1 = 0;//設置DIR,艙門往上跑
PA0 = 1;
Delay(10000);
PA0 = 0;
Delay(10000);
}
}
void Gate_backward(void)
{
GPIO_CLR_INT_FLAG(PB, BIT1|BIT2|BIT3|BIT4);//清除下中斷標志
NVIC_EnableIRQ(GPB_IRQn);//一進入下落我就使能中斷傳感器
while(1)//開始下落
{
while(stop_flag == 1);
//如果此時有一個傳感器為低,就說明它被擋住了,那我就停止先不下落
//只要有一個傳感器為0,就是說有東西遮住,就死在這里
while(!((PB1==1)&&(PB2==1)&&(PB3==1)&&(PB4==1)))
{
PE0 = 0;//綠燈亮
}
PE0 = 1;//綠燈滅
if(PD2 == 0)//中復位開關
{
middle_flag = 1;
Gate_foreword();//往上跑到頂部并延時
}
if(PC3 == 0)//下復位開關
{
down_flag = 1;
PE0 = 0;//綠燈亮
PF2 = 1;//藍燈滅
Delay(50000000);
PE0 = 1;//綠燈滅
break;
}
PA1 = 1;//設置DIR,艙門往下跑
PA0 = 1;
Delay(10000);
PA0 = 0;
Delay(10000);
}
}
void GPB_IRQHandler(void)
{
//只要有一個引腳有中斷進來
if(GPIO_GET_INT_FLAG(PB,BIT1|BIT2|BIT3|BIT4))
{
GPIO_CLR_INT_FLAG(PB, BIT1|BIT2|BIT3|BIT4);
sensor_flag = 1;
PF2 = 0;//藍燈亮
Gate_foreword();//向上運動到頂
}
else
{
/*清除所有PB中斷*/
PB->INTSRC = PB->INTSRC;
}
}
//PC4開關中斷
void GPC_IRQHandler(void)
{
//只要有一個引腳有中斷進來
if(GPIO_GET_INT_FLAG(PC,BIT4))
{
GPIO_CLR_INT_FLAG(PC, BIT4);
Gate_foreword();//向上運動到頂
}
else
{
/*清除所有PC中斷*/
PC->INTSRC = PC->INTSRC;
}
}
void UART0_IRQHandler(void)
{
volatile uint8_t u8char = 0;
IntStatus = UART0->INTSTS;
//接收數據有效中斷
if(IntStatus & UART_INTSTS_RDAIF_Msk)
{
while(UART_IS_RX_READY(UART0))//RXFIFO有數據
{
u8char = UART_READ(UART0);
while(UART_IS_TX_FULL(UART0));//TXFIFO無數據
UART_WRITE(UART0,u8char);
}
if(u8char == 'y')
{
stop_flag = 0;
}
else if(u8char == 'n')
{
stop_flag = 1;//上升或者下降中間位置停
}
else
{
stop_flag = 2;// 到最底下停止
}
}
else
{
UART0->INTSTS &= ~UART_INTSTS_RDAIF_Msk;
}
}
void SYS_Init(void)
{
//使用內部的RC時鐘振蕩器
CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);
//超時接收等待內部時鐘穩定
CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);
//設置HIRC為HCLK的時鐘源并且HCLK沒有分頻HIRC
CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));
/*使能外部高速晶振*/
CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
/*等待12MHz穩定*/
CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
/*切換HCLK的時鐘源為外部晶振*/
CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT, CLK_CLKDIV0_HCLK(1));
//設置HCLK的頻率,PLL 144MHz 但是HCLK得時鐘源是PLL并且2分頻
CLK_SetCoreClock(PLL_CLOCK);
SystemCoreClockUpdate();
/*選擇UART時鐘源HXT*/
CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));
/*使能UART的時鐘*/
CLK_EnableModuleClock(UART0_MODULE);
/*PD0是UART_RXD PD1是UART_TXD*//*引腳復用*/
SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD1MFP_Msk | SYS_GPD_MFPL_PD0MFP_Msk);
SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD1MFP_UART0_TXD | SYS_GPD_MFPL_PD0MFP_UART0_RXD);
}
void UART0_Init(void)
{
SYS_ResetModule(UART0_RST);
UART_Open(UART0, 115200);
//使能了RDA中斷,THRE中斷和RXTO中斷
UART_EnableInt(UART0,(UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk));
}
void GPIO_Init(void)
{
GPIO_SetMode(PE, BIT0, GPIO_MODE_OUTPUT);
PE0 = 1;//綠燈滅
GPIO_SetMode(PF, BIT2, GPIO_MODE_OUTPUT);
PF2 = 1;//藍燈滅
GPIO_SetMode(PD, BIT7, GPIO_MODE_OUTPUT);/*控制蜂鳴器輸出,低滅高響*/
BEEP_Onetime();//有源蜂鳴器
/***********************************輸出步進電機*********************************/
GPIO_SetMode(PA, BIT0, GPIO_MODE_OUTPUT);//MOTOR1_A-
GPIO_SetMode(PA, BIT1, GPIO_MODE_OUTPUT);//MOTOR1_DIR-
GPIO_SetMode(PA, BIT2, GPIO_MODE_OUTPUT);//MOTOR2_A-
GPIO_SetMode(PA, BIT3, GPIO_MODE_OUTPUT);//MOTOR2_DIR-
/************************************輸入開關***********************************/
GPIO_SetMode(PD, BIT2, GPIO_MODE_INPUT);
GPIO_SetMode(PD, BIT3, GPIO_MODE_INPUT);
GPIO_SetMode(PC, BIT3, GPIO_MODE_INPUT);
GPIO_SetMode(PC, BIT4, GPIO_MODE_INPUT);
/**********************輸入傳感器***********************************************/
GPIO_SetMode(PB, BIT0, GPIO_MODE_INPUT);
GPIO_SetMode(PB, BIT1, GPIO_MODE_INPUT);
GPIO_SetMode(PB, BIT2, GPIO_MODE_INPUT);
GPIO_SetMode(PB, BIT3, GPIO_MODE_INPUT);
GPIO_SetMode(PB, BIT4, GPIO_MODE_INPUT);
GPIO_SetMode(PB, BIT5, GPIO_MODE_INPUT);
GPIO_SetMode(PB, BIT6, GPIO_MODE_INPUT);
GPIO_SetMode(PC, BIT0, GPIO_MODE_INPUT);
GPIO_SetMode(PC, BIT1, GPIO_MODE_INPUT);
GPIO_SetMode(PC, BIT2, GPIO_MODE_INPUT);
/**********************配置中斷*********************************************/
GPIO_EnableInt(PB,0, GPIO_INT_FALLING);//傳感器1 J8
GPIO_EnableInt(PB,1, GPIO_INT_FALLING);//傳感器1 J9
GPIO_EnableInt(PB,2, GPIO_INT_FALLING);//傳感器2 J10
GPIO_EnableInt(PB,3, GPIO_INT_FALLING);//傳感器3 J11
GPIO_EnableInt(PB,4, GPIO_INT_FALLING);//傳感器4 J12
GPIO_EnableInt(PB,5, GPIO_INT_FALLING);//傳感器4 J13
GPIO_EnableInt(PB,6, GPIO_INT_FALLING);//傳感器4 J14
GPIO_EnableInt(PC,4, GPIO_INT_FALLING);//開關J4
NVIC_EnableIRQ(GPC_IRQn);
GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_1024);
GPIO_ENABLE_DEBOUNCE(PB,BIT1|BIT2|BIT3|BIT4);//去抖動
GPIO_ENABLE_DEBOUNCE(PC,BIT4);//去抖動
}
int32_t main(void)
{
volatile uint32_t clock_fre = 0;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
M452LG6AE_Gate.rar
(2.89 MB, 下載次數: 36)
2017-6-22 14:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖PCB.rar
(304.67 KB, 下載次數: 31)
2017-6-22 14:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
1058939249
時間:
2018-2-26 22:43
謝謝分享感謝
作者:
cement777
時間:
2018-12-15 14:29
謝謝分享感謝
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1