版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机课程设计单片机控制直流电动机姓名:xxx 学号:xxx专业:xxx指导老师:xxx组号:第xxx组单片机控制直流电机摘要随着时代的进步和科技的发展,电机调速系统在工农业生产、交通运输以及日常伤害中起着越来越重要的作用、由于直流电机剧院良好的起、制动性能,宜与在广泛范围内平滑调速。在轧钢机、矿井卷机,挖掘机、金属切削机床、金属切削机床、造纸机高层电梯等领域中得到广泛应用。长期以来,由于直流调速系统的性能指标优于交流调速系统。 PWM控制技术就是以该结论为理论基础,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各种脉冲的宽度进行调制,既
2、可改变逆变电路输出电压大小,也可以改变输出频率。PWM控制技术及其控制简单、灵活和动态响应好的优点而成为电子技术最广泛应用的控制方式,也是人们研究的热点。由于必须在工作期间改变直流电机的速度,直流电机的控制是一个较困难的问题。直流电机高效运行的最常见方法是施加一个 PWM(脉宽调制)方波,其占空比对应于所需速度。电机起到一个低通滤波器作用,将PWM信号转换为有效直流电平。特别是对于微处理器驱动的直流电机,由于PWM信号相对容易产生,这种驱动方式使用的更为广泛。设计要求 采用单片机设计一个控制直流电机并测量转速的装置。单片机扩展有A/D转换芯片ADC0809和D/A转换芯片DAC0832。 (1
3、)通过改变A/D输入端可变电阻来改变A/D的输入电压,D/A输入检测量大小,进而改变直流电机的转速。 (2)手动控制。在键盘上设置两个按键直流电动机加速键和直流电机减速键。在手动状态下,每按一次键,电机的转速按照约定的速率改变。(3)键盘列扫描(4 ´ 6)。实验原理 与步进电机类似,直流电机也可精确地控制旋转速度或转矩。 直流电机是通过两个磁场的互作用产生旋转。其结构如下页图所示,固定部分(定子)上,装设了一对直流励磁的静止的主磁极N和S,在旋转部分(转子)上装设电枢铁心。定子与转子之间有一气隙。在电枢铁心上放置了由A和X 两根导体连成的电枢线圈,线圈的首端和末
4、端分别连到两个圆弧形的铜片上,此铜片称为换向片。 直流电机的速度与施加的电压成正比,输出转矩则与电流成正比。由于必须在工作期间改变直流电机的速度,直流电机的控制是一个较困难的问题。直流电机高效运行的最常见方法是施加一个 PWM(脉宽调制)方波,其占空比对应于所需速度。电机起到一个低通滤波器作用,将PWM信号转换为有效直流电平。特别是对于微处理器驱动的直流电机,由于PWM信号相对容易产生,这种驱动方式使用的更为广泛。利用直流电机的速度与施加电压成正比的原理,通过滑动变阻器向ADC0809输入控制电压信号,经AD后,输入到AT89C51中,AT89C51将此信号转发给DAC0832,通过功放电路放
5、大后,驱动直流电机。设计方案1.系统控制电路采用STC89C52单片机由软件产生脉冲调制信号,来对直流电机进行控制。2.电机控制电路采用由三极管搭成的H型桥电路来控制电机的转动。3.键盘电路采用行式键盘实现电机转速的加速减速以及正反转的控制,在手动状态下,每按一次,其转速相应发生改变。4.显示电路采用LM016L对电机运动状态进行显示。系统组成框图系统总组成框图以STC89C52为主控芯片,采用桥式电路对直流电机驱动,如下所示:H型桥式驱动电路直流电机单片机主控电路键盘控制电路硬件电路设计1.键盘控制电路按下DEC按钮,电机转速降低;按下INC按钮,电机转速增加。2.单片机主控电路图该部分电路
6、主要由STC89C52主控芯片和晶振组成。STC89C52芯片是低功耗8位CMOS微处理器,提供串口程序下载口。它主要有以下几个特点:256字节的RAM;4KB的ROM;32个通用I/O口线,为用户提供了丰富的I/O口资源;32个通用工作寄存器;2个定时器/计数器;具有6个中断源;4.05.5V的工作电压等。晶振给单片机正常工作提供稳定的信号。3.H型桥式电机驱动电路H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,只须导通对角线上的一对三极管。在此设计中用到的完整的驱动电路如下:主控程序程序流程开始取反控制方向位减速加速消去TF0,重装初值方向控制按键复位还原按键加速控制按键减速控制
7、按键主控程序系统初始化总仿真电路图程序清单1.主程序#include "AT89X51.h"#include <intrins.h>#include <stdio.h>#include "led.h"#include "uart.h"#include "timer0.h"#include "timer1.h"#include "common.h"#include "ADC0831.h"#include "lcd1602.h
8、"#include "keyboard.h"#include "ISR.h"#include "DaType_Change.h"#define DcMotor_Direction_PuChar8 code *String1 = "DC Motor Control"uChar8 code *String2 = "pwm: /100"uChar8 PWM_buff3;void main(void)LCD_Init();timer0_Init();timer1_Init();#ifdef D
9、cMotor_Direction_PDer1=0;#else Der1=1;#endifLED_Run_EN();WrStrLCD(0,0,String1);WrStrLCD(1,0,String2);while(1)key_Process(); /按键处理子程序Char_To_Str(PWM_duty, &PWM_buff0); /液晶显示子程序 WrStrLCD(1,4,&PWM_buff0);2.子程序#include <ADC.h>unsigned char value_converted=0x00; unsigned char value_AN6=0x00
10、; unsigned char value_AN7=0x00; bit end_of_convertion=0; void ADC_Config(void)ADCF = 0xC0;ADCLK = 0x06; ADCON = 0x20; EA = 1; EADC = 1;while(1)ADCON &= 0x07; ADCON |= 0x06;ADCON &= 0x40; ADCON |= 0x08;while(!end_of_convertion); end_of_convertion=0; value_AN6=value_converted;ADCON &= 0x07
11、; ADCON |= 0x07; ADCON &= 0x40; ADCON |= 0x08; while(!end_of_convertion);end_of_convertion=0;value_AN7=value_converted;void it_Adc(void) interrupt 8ADCON &= 0x10;value_converted = ADDH;end_of_convertion=1;.#include "adc0831.h"void ADC_CLK(void) adcclk=1; _nop_(); adcclk=0; _nop_();
12、 uChar8 Read_ADC(void) uChar8 i;bit temp = ADC_Val0;adccs=0;ADC_CLK();while(adcdo); for (i=0; i<8; i+) ADC_CLK();ADC_Val = (ADC_Val<<1)|adcdo; adccs=1;return(ADC_Val);void IntToStr(uInt16 t, uChar8 *str, uChar8 n) uChar8 a5; char i, j; a0=(t/10000)%10; /取得整数值到数组 a1=(t/1000)%10; a2=(t/100)%1
13、0; a3=(t/10)%10; a4=(t/1)%10; for(i=0; i<5; i+) /转成ASCII码 ai=ai+'0' for(i=0; ai='0' && i<=3; i+);/计算空格(0)数量 for(j=5-n; j<i; j+) /填充空格 *str=' ' str+; for(; i<5; i+) *str=ai; str+; /加入有效的数字 *str='0' .#include "beep.h"sbit beep=P14;void Beep
14、Ring(void)beep=0;DelayMS(100);beep=1;DelayMS(100);#include "DaType_Change.h"void Char_To_Str(uChar8 Data, uChar8 *str) uChar8 a4; uChar8 i,j; a0=(Data/100)%10; a1=(Data/10)%10; a2=(Data/1)%10; for(i=0; i<3; i+) /转成ASCII码 ai=ai+'0' for(i=0; ai='0' && i<3; i+);
15、for(j=0; j<i; j+) /填充空格 *str=' ' str+; for(; i<3; i+) *str=ai; str+; /加入有效的数字 *str='0' #include"delay.h"void DelayUS(uChar8 ValUS)/精确延时,18uS+(ValUS-1)*8usfor(;ValUS>0;ValUS-);static void Delay1MS(void)uChar8 i=2,j=199;dowhile(-j);while(-i);void DelayMS(uInt16 ValMS
16、)uInt16 uiVal;for(uiVal=0;uiVal<ValMS;uiVal+)Delay1MS();#include"DS18B20.h"sbit DQ=P10;void SendDS18B20(uChar8 SendDat)uChar8 i;for(i=0;i<8;i+)DQ=0;_nop_();_nop_();_nop_();_nop_();/延时4usif(SendDat&0x01)=0)DQ=0;elseDQ=1;SendDat=SendDat>>1;DelayUS(5);DQ=1;uChar8 Init_DS18B20(
17、void)uChar8 i;DQ=0;DelayUS(61);DQ=1;DelayUS(8);for(i=0;i<100;i+)if(DQ)break;DQ=1;DelayUS(11);return 0xff;uChar8 ReceiveDS18B20(void)uChar8 tmp=0;uChar8 i;for(i=0;i<8;i+)tmp=tmp>>1;DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();DQ=1;DelayUS(1);if(DQ)tmp|=0x80;DQ=1;_nop_();_nop_();_n
18、op_();_nop_();_nop_();_nop_();return(tmp);uInt16 ReadDS18B20(void)unionuInt16 Data;uChar8 tmp2;temp;temp.tmp1=ReceiveDS18B20();temp.tmp0=ReceiveDS18B20();return(temp.Data);uInt16 GetTemper(void)uInt16 Temper;DQ=1;Init_DS18B20();SendDS18B20(0xcc);SendDS18B20(0xbe);Temper=ReadDS18B20();return(Temper);
19、.#include "ISR.h"uInt16 ms_Counter;uChar8 ucCounter;uInt16 key_l;/按键低电平计数器uChar8 key_h;/按键高电平计数器uChar8 key;uChar8 kpush;bit Update_ADC_Flag=0;void ISR_Ext0(void) interrupt 0void ISR_timer0(void) interrupt 1TH0=(65535-1000)/255;TL0=(65535-1000)%255;if(ms_Counter=PWM_duty)Der2 = 0;ms_Counter
20、+;if(ms_Counter=PWM_cycle)ms_Counter=0;if(PWM_duty) Der2 = 1;void ISR_timer1(void) interrupt 3TH1=0xFB;TL1=0x1E;if(P0&0x0C)=0x0C)if(key_l>30)&&(key_l<800)&&(key_h>30)/释放按键,如果之前按键的时间1s,读出键值key=kpush;if(+key_h)>200) key_h=0;/记录高电平时间key_l=0;if(key>0x80) key=0;elsekpus
21、h=P0&0x0C;key_l+;if(key_l>800)&&(key_h>30)key=kpush|0x80;key_h=0;key_l=0;#include "keyboard.h"#include "ISR.h"#include "LED.h"uChar8 PWM_duty = 50;uChar8 PWM_cycle = 100; #include "keyboard.h"#include "ISR.h"#include "LED.h&quo
22、t;uChar8 PWM_duty = 50;uChar8 PWM_cycle = 100;/4*4矩阵式键盘扫描uChar8 Key_Scan(void)uChar8 code_h,code_l;P3=0xF0;if(P3&0xF0)!=0xF0)DelayMS(1);if(P3&0xF0)!=0xF0)code_h=0xFE;while(P3&0xF8)!=0xF0)P3=code_h;if(P3&0xF0)!=0xF0)code_l=(P3&0xF0|0x0F);return(code_h)+(code_l);else code_h=(code_h
23、<<1)|0x01;return(0);/4*4矩阵式键盘译码uChar8 Get_Key_Val(uChar8 key_temp)switch(key_temp)case 0x14 : return 1;case 0x24 : return 2;case 0x44 : return 3;case 0x12 : return 4;case 0x22 : return 5;case 0x42 : return 6;case 0x11 : return 7;case 0x21 : return 8;case 0x41 : return 9;default : return 0;/按键处
24、理函数void key_Process(void)switch(key)case 0x08:/KB1键按下if(PWM_duty=100) PWM_duty=100;else PWM_duty+;break;case 0x88:/KB1键按下if(PWM_duty=100) PWM_duty=100;else if(PWM_duty<=90)PWM_duty=PWM_duty+10;break;case 0x04: /KB2键按下if(PWM_duty=0x00) PWM_duty=0x00;else PWM_duty-;break;case 0x84: /KB2键按下if(PWM_du
25、ty=0x00) PWM_duty=0x00;else if(PWM_duty>=10)PWM_duty=PWM_duty-10;break;default : break;key = 0x1C;uChar8 Key_Scan(void)uChar8 code_h,code_l;P3=0xF0;if(P3&0xF0)!=0xF0)DelayMS(1);if(P3&0xF0)!=0xF0)code_h=0xFE;while(P3&0xF8)!=0xF0)P3=code_h;if(P3&0xF0)!=0xF0)code_l=(P3&0xF0|0x0F)
26、;return(code_h)+(code_l);else code_h=(code_h<<1)|0x01;return(0);/4*4矩阵式键盘译码uChar8 Get_Key_Val(uChar8 key_temp)switch(key_temp)case 0x14 : return 1;case 0x24 : return 2;case 0x44 : return 3;case 0x12 : return 4;case 0x22 : return 5;case 0x42 : return 6;case 0x11 : return 7;case 0x21 : return 8;
27、case 0x41 : return 9;default : return 0;/按键处理函数void key_Process(void)switch(key)case 0x08:/KB1键按下if(PWM_duty=100) PWM_duty=100;else PWM_duty+;break;case 0x88:/KB1键按下if(PWM_duty=100) PWM_duty=100;else if(PWM_duty<=90)PWM_duty=PWM_duty+10;break;case 0x04: /KB2键按下if(PWM_duty=0x00) PWM_duty=0x00;else
28、 PWM_duty-;break;case 0x84: /KB2键按下if(PWM_duty=0x00) PWM_duty=0x00;else if(PWM_duty>=10)PWM_duty=PWM_duty-10;break;default : break;key = 0x1C;#include"lcd1602.h"sbit RS=P05;sbit RW=P06;sbit EN=P07;static void DectectBusyBit(void)P2=0xFF;RS=0;RW=1;EN=1;DelayMS(1);while(P2&0x80);EN=0;
29、void WrComLCD(uChar8 ComVal)RS=0;RW=0;EN=1;P2=ComVal;DelayMS(1);EN=0;void WrDatLCD(uChar8 DatVal)RS=1;RW=0;EN=1;P2=DatVal;DelayMS(1);EN=0;void LCD_Init(void)WrComLCD(0x38);/16x2行显示,5x7点阵,8位数据接口DelayMS(1);WrComLCD(0x38);WrComLCD(0x01);/显示清屏WrComLCD(0x06);/光标自增,画面不动DelayMS(1);WrComLCD(0x0C);/开显示,关光标并不
30、闪烁void ClearDisLCD(void)WrComLCD(0x01);DelayMS(1);void WrStrLCD(bit Row,uChar8 Column,uChar8 *String)if(!Row) WrComLCD(0x80+Column);else WrComLCD(0xC0+Column);while(*String)WrDatLCD(*String);String+;void WrCharLCD(bit Row,uChar8 Column,uChar8 Dat)if(!Row) WrComLCD(0x80+Column);else WrComLCD(0xC0+Col
31、umn);WrDatLCD(Dat);#include "led.h"void LED_Run_EN()LED_Run = 0;void LED_Run_disEN()LED_Run = 1;void LED_Alarm_EN()LED_Alarm = 0;void LED_Alarm_disEN()LED_Alarm = 1;void LED_Flash(void)P01 = 0;DelayMS(1000);P01 = 1;DelayMS(1000);#include "SPI.h"char serial_data;char data_example=
32、0x55;char data_save;bit transmit_completed= 0;void SPI_Config(void)SPCON |= 0x10; /* Master mode */SPCON |= 0x82; /* Fclk Periph/128 */SPCON |= 0x20; /* P1.1 is available as standard I/O pin */SPCON &= 0x08; /* CPOL=0; transmit mode example */SPCON |= 0x04; /* CPHA=1; transmit mode example */IEN
33、1 |= 0x04; /* enable spi interrupt */SPCON |= 0x40; /* run spi */EA=1; /* enable interrupts */void it_SPI(void) interrupt 9 /* interrupt address is 0x004B */switch( SPSTA ) /* read and clear spi status register */case 0x80:serial_data=SPDAT; transmit_completed=1;break;case 0x10:break;case 0x40:break;#include"timer0.h"void timer0_Init(void)TMOD=(TMOD&0xF0)|0x01);/定时器0工作在模式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年08月辽宁2024年中国农业银行辽宁分行秋季校园招考笔试历年参考题库附带答案详解
- 2025年度高科技园区场地租赁合同范本9篇
- 2025年度国际环保项目技术咨询与实施合同4篇
- 2025年度大型体育场馆设施建设合同范本2篇
- 2025版智慧城市运营管理合同4篇
- 健康生活的类型和特点
- 2025年度个人房屋建造质量保证服务合同4篇
- 专业技能与实践能力
- 11 空气占据空间吗 说课稿-2023-2024学年科学三年级下册人教鄂教版
- 4地球-我们的家园(第3课时)(说课稿)2023-2024学年统编版道德与法治六年级下册
- 2024年6月高考地理真题完全解读(安徽省)
- 吸入疗法在呼吸康复应用中的中国专家共识2022版
- 1-35kV电缆技术参数表
- 信息科技课程标准测(2022版)考试题库及答案
- 施工组织设计方案针对性、完整性
- 2002版干部履历表(贵州省)
- DL∕T 1909-2018 -48V电力通信直流电源系统技术规范
- 2024年服装制版师(高级)职业鉴定考试复习题库(含答案)
- 门诊部缩短就诊等候时间PDCA案例-课件
- 第21课《邹忌讽齐王纳谏》对比阅读 部编版语文九年级下册
- NB-T32042-2018光伏发电工程建设监理规范
评论
0/150
提交评论