|
单片机控制步进电机正反转
设计原理:采用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)
|
|