|
|
單片機控制步進電機正反轉
設計原理:采用51單片機最小系統,通過達林頓管(ULN2003)來控制一個5線4相異步電機的正轉和反轉
從而達到晾衣架升降的目的
本系統還有衣服的重量自動檢測的功能,采用模數轉換器ADC0832,對重量傳感器進行重量采集
將采集到的信號轉換為數字信號送至單片機處理,并最終顯示在LCD1602液晶顯示器上
系統會自動的根據衣物的重量控制晾衣架的起落
單片機源程序:
- #include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
- #include "adc0832.h"
- #include "lcd1602.h"
- #include "delay.h"
- #include<intrins.h>
- #include <string.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar flag=0;
- unsigned char code F_Rotation[8]={0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48}; //順時針轉表格
- unsigned char code B_Rotation[8]={0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08}; //逆時針轉表格
- /******************************************/
- /* 延時子程序 */
- /******************************************/
- void Delay1ms(unsigned int count)
- {
- unsigned int i,j;
- for(i=0;i<count;i++)
- for(j=0;j<120;j++);
- }
- //步進電機正轉函數
- void SETP_MOTOR_FFW(uchar n)
- {
- uchar i,j;
- for(i=0;i<5*n;i++)
- {
- for(j=0;j<8;j++)
- {
-
- P3 = F_Rotation[j];
- Delay1ms(25);
-
- }
- }
- }
- //步進電機反轉函數
- void SETP_MOTOR_REV(uchar n)
- {
- uchar i,j;
- for(i=0;i<5*n;i++)
- {
- for(j=0;j<8;j++)
- {
-
- P3 = B_Rotation[j];
- Delay1ms(25);
- }
- }
-
- }
- void adc0832_cl(uchar q)
- {
- q=q*100/255; //對采集到的AD值進行0-100的量化
- LCD_Write_String(4,0,"Weight");
- write_com(0xC0+5);
- write_dat(q/100+0x30); //百位
- write_dat(q%100/10+0x30); //十位
- write_dat(q%10+0x30); //個位
-
- if( q>70 && flag==1)
- {SETP_MOTOR_REV(2); flag=0; }
- if(q<30 && flag==0)
- {SETP_MOTOR_FFW(2); flag=1; }
-
-
-
- }
- void main()
- {
- lcd1602_init(); //液晶初始化
- while(1)
- {
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
下載:
晾衣控制電機轉動.rar
(116.58 KB, 下載次數: 113)
2017-5-7 12:32 上傳
點擊文件名下載附件
|
|