当前位置:首页 >> 信息与通信 >>

avr或51单片机pwm控制小车左右电机并调速

avr 或 51 单片机 pwm 控制小车左右电机并调速,红外对管检测的程序

// Crystal: 8.0000Mhz #include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int uint discrepancy=0; //function declaration void port_init(void); void motor(uchar index, uchar speed);//input PWM wave void sensor_state(void);//get the running condition void revise_to_line(void );//0=run forward,1=left,2=right,3=sever left,4=sever right void delayms(uint MS) ; //call this routine to initialize all peripherals void init_devices0(void) { //stop errant interrupts until set up CLI(); //disable all interrupts timer0_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x02; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } //initialize T/C1 void timer1_init(void) { TCCR1B = 0x00;//停止定时器 TIMSK |= 0x00;//中断允许 TCNT1H = 0x00; TCNT1L = 0x00;//初始值 OCR1AH = 0x00; OCR1AL = 0xF0;//匹配 A 值 OCR1BH = 0x00; OCR1BL = 0xF0;//匹配 B 值 ICR1H = 0xFF;

ICR1L = 0xFF;//输入捕捉匹配值 TCCR1A = 0xA1; TCCR1B = 0x01;//启动定时器 } //call this routine to initialize all peripherals void init_devices1(void) { CLI(); //禁止所有中断 timer1_init( ); MCUCR = 0x00; MCUCSR = 0x80;//禁止 JTAG GICR = 0x00; SEI();//开全局中断 } //PWM 调速,通过改变占空比,周期性地开闭使能端,调节电机的有效电压。 //use PD4,PD5 to output PWM,speed(0~255) void motor(uchar index, uchar speed) { if(index==1) {OCR1AH = 0x00; OCR1AL =speed; } if(index==2) {OCR1BH = 0x00; OCR1BL =speed; } } //delay time by ms void delayms(uint MS) { uint i,j; for( i=0;i<MS;i++) for(j=0;j<1141;j++); //1141 是在 8MHz 晶振下 } //port initial void port_init( ) {

DDRA = 0x00;//input running state DDRB = 0xFF;//control two motors DDRC = 0x00; DDRD = 0x30;//PWM wave PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; PORTD = 0x30; } /*****************传感器函数********************/ //获取小车的行驶状态。0(直线),1(左偏),2(右偏),3(严重左偏), 4(严重右偏) //从左到右传感器(光电对管)对应的输入端口:PA0,PA1,PA2,PA3,PA4 //正常行驶时引导线夹在 PA1,PA3 之间 //根据端口 PA0,PA1,PA3,PA4 的值判断行驶状态。(中间传感器 PA2 并未 使用) void sensor_state(void) { uchar state,state1,state2

;//暂存 PINA0~PINA4 相应位的值

state1=0b00000010&PINA;state2=0b00000001&PINA; if(state1==0b00000010) { if(state2==0b00000001) {discrepancy=4; return;} else {discrepancy=2;return; } } state1=0b00001000&PINA;state2=0b00010000&PINA; if(state1==0b00001000) { if(state2==0b00010000) {discrepancy=3; return;} else {discrepancy=1; return;} } //补充严重左偏或严重右偏的情况 state=0b00000001&PINA; if(state==0b00000001) {discrepancy=4;return; } state=0b00010000&PINA;

if(state==0b00010000) {discrepancy=3;return ;} discrepancy=0;

} /************************循迹函数******************/ //ENA---PD4,ENB---PD5,PORTB0~3----IN1~3 ,L298 电机驱动电路 //PB0,PB1 控制右电机,PB1,PB2 控制左电机 void revise_to_line( )//0=run forward,1=left,2=right,3=sever left,4=sever right { if (discrepancy==0) { //PORTB=0b11111001; PORTB|=((1<<PB3)|(1<<PB0)); PORTB&=~((1<<PB1)|(1<<PB2)); delayms(10); return; } if (discrepancy==1) { //PORTB=0b11111000; PORTB|=(1<<PB3); PORTB&=~((1<<PB0)|(1<<PB1)|(1<<PB2)); while((0b00001000&PINA)==0b00001000);//get the value of PINA3 return; } if (discrepancy==2) { // PORTB=0b11110001; PORTB|=(1<<PB0); PORTB&=~((1<<PB1)|(1<<PB2)|(1<<PB3)); while((0b00000010&PINA)==0b00000010) ;//get the value of PINA1 return; } if (discrepancy==3) { // PORTB=0b11111000; PORTB|=(1<<PB3); PORTB&=~((1<<PB0)|(1<<PB1)|(1<<PB2));

while((0b00001000&PINA)==0b00001000);//get the value of PINA3 return; } if (discrepancy==4) { PORTB|=(1<<PB0); PORTB&=~((1<<PB1)|(1<<PB2)|(1<<PB3)); while((0b00000010&PINA)==0b00000010) ;//get the value of PINA1 return; } } //main function:action structure // // void main(void) { port_init(); init_devices1( ); //set speed value motor(1,200); motor(2,200); while(1) { sensor_state( ); revise_to_line( ); } }


相关文章:
avr或51单片机pwm控制小车左右电机并调速.doc
avr 或 51 单片机 pwm 控制小车左右电机并调速,红外对管检测的程序 /
基于51单片机的小型直流电机PWM调速系统设计_图文.pdf
本系统控制电路简单,实现 方便,可广泛应用于各类玩具小车或小型直流电机调速领域。 【关键词】51单片机;直流电机调速;PWM;PID 中图分类号:TN1 统电路连接见图2。...
PWM电机调速原理及51单片机PWM程序经典.doc
Pwm 电机调速原理 对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的...P1_4=1; }< 1.下面是 AVR 的程序,51 产生 PWM 波麻烦,可以用 AVR。主要...
51单片机控制直流电机PWM调速.doc
51单片机控制直流电机PWM调速 - 51 单片机控制直流电机 PWM 调速 实验目的 1.掌握脉宽调制 (PWM) 的方法。 2.用程序实现脉宽调制,并对直流电机进行调速控制。 ...
PWM脉冲宽度调制与智能小车PWM直流电机调速_图文.ppt
51单片机实训课程 作者:小王老师 欢迎进入云龙电子科技大讲堂 www.yunlongdz.cn PWM基础知识 与 智能小车PWM直流电机调速 欢迎进入云龙电子科技大讲堂 www.yunlongdz...
AVR单片机实现的直流电机PWM调速控制器.ppt
AVR单片机实现的直流电机PWM调速控制器 - 8535和L298驱动构成的直流电机PWM调速控制器。详细 介绍了本调速控制系统的工作原理、光电编码器接口电 路、PWM驱动接口电路...
PWM调速+循迹 智能小车c代码 51单片机.doc
PWM调速+循迹 智能小车c代码 51单片机_计算机软件及应用_IT/计算机_专业资料。...PWM电机调速原理及51单片... 4页 1下载券 avr或51单片机pwm控制小... ...
用AVR单片机实现直流电机PWM调速(1).pdf
AVR单片机实现直流电机PWM调速(1)_信息与通信_工程科技_专业资料。第 27 卷...( PC 机或单片机 ) 获 得控制电机转速的命令字 , 命令字包括控制电 机的...
单片机产生PWM控制直流电机的转速_图文.ppt
PWM信号输入 光电隔离处理 功率驱动级 负载电源 智能小车电机调速案例分析 ? 在智能小车的硬件电路基础上,利用AT89S51的定时器T0和T1实现PWM功 能控制小车的转弯...
用AVR单片机实现直流电机PWM调速.pdf
AVR单片机实现直流电机PWM调速 - 各种电机控制器件 驱动芯片... 用AVR单片机实现直流电机PWM调速_信息与通信_工程科技_专业资料。各种电机控制器件 驱动芯片 ...
直流电机调速,智能小车避障51单片机程序.doc
直流电机调速,智能小车避障51单片机程序 - /*** 智能小车电机驱动程序 P3.3 口控制...
基于51单片机的PWM直流电机调速报告_图文.doc
51 单片机PWM 直流电机调速 摘要直流电机脉冲宽度...PWM 技术得到了高速发展,各式各样的脉宽调速控制器,...AVR、ARM、8086 和 MSP430 等,2010 年又增加了 ...
基于51单片机的PWM直流电机调速系统_图文.pdf
皇:jj7 内蒙古大学硕士学位论文 基于51单片机PWM直流电机调速系统 摘要 在现代社会,自动控制系统遍及我们生活领域的各个方面,如在工业自动 化中的应用:轧钢设备...
基于51单片机的直流电机PWM调速系统.doc
龙源期刊网 http://www.qikan.com.cn 基于 51 单片机的直流电机 PWM 调速系统 作者:宫晓明 来源:《科学家》2017 年第 16 期 摘要 脉冲宽度调制(PWM)是利用...
基于51 单片机的PWM 控制直流电机四象限调速系统_图文.pdf
06 月 25 日 题目及要求设计题目: 基于 51 单片机PWM 控制直流电机四象限调速系统 设计内容: 1、用 51 单片机设计 PWM 用于驱动控制电路并利用仿真软件仿真...
51单片机H桥电路控制电机正反转和PWM调速_图文.doc
51单片机H桥电路控制电机正反转和PWM调速 - 搭了个 H 桥电路,控制电机的正反转和 PWM 调速,程序是网上的,改改引脚就能用,电路和 源程序如下: 功能:P1.1 ...
15、基于单片机STC89C52的直流电机PWM调速控制系统.doc
15、基于单片机STC89C52的直流电机PWM调速控制系统 - 基于慧净电子智能小车的直流电机PWM 调速控制系统 第一章:前言 Pwm 电机调速原理 对于电机的转速调整,我们是...
基于AVR单片机的直流电动机的PWM调速系统设计_图文.pdf
基于AVR单片机的直流电动机PWM调速系统设计_信息与...avr或51单片机pwm控制小... 5页 免费 基于单片机...
51单片机PWM直流电机闭环调速系统设计.doc
51 单片机 PWM 直流电机闭环调速系统设计 采用硬件电路实现直流电机闭环调速系统已在实践中应用多年,其硬件组成复杂,调整 困难,缺乏控制的灵活性。本文介绍的直流电机...
AVR单片机实现的直流电机PWM调速控制器.pdf
avr或51单片机pwm控制小车... 5页 免费 avr单片机 TC1的16位PWM输... 2页...AV R 单片机实现的直流电机 PWM 调速控制器张立勋 ,沈锦华 ,路敦民 ,杨 勇 ...
更多相关标签: