PWM超声波小车Word文档格式.docx
- 文档编号:20042950
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:11
- 大小:17.22KB
PWM超声波小车Word文档格式.docx
《PWM超声波小车Word文档格式.docx》由会员分享,可在线阅读,更多相关《PWM超声波小车Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
PA1)));
//
TCCR1B=0X04;
//256分频。
起动计时
while(PINA&
PA1));
TCCR1B=0X00;
停止计时
distance=((TCNT1*16)*0.034)/2;
//cm
sei();
//ad_Init();
//_delay_ms
(2);
OCR0=PIDCalc(&
spid,distance);
_delay_ms(20);
}
intmain(void)
{
//LCD1602_Initial();
asm("
nop"
);
chaosheninit();
//超声波初始化
DDRD|=((1<
PD4)|(1<
PD5)|(1<
PD6)|(1<
PD7));
//pd4左反转,D5右转,D6左正转,D7右正转
PORTD&
=~((1<
PIDInit(&
spid);
setPID(&
spid,10,0,0);
spid.SetPoint=45;
init_devices();
sei();
while
(1)
{
compare_ad();
};
//SIGNAL(SIG_ADC)
//{
//cli();
//uintadjust=0;
//ucharq,g;
//adl=ADCL;
//adh=ADCH;
//adjust=adl;
//adjust|=(adh<
8);
//capv=adjust*p*10;
//q=capv%10;
//g=capv/10%10;
//LCD1602_Display(0xc0,g+0x30);
//+30将数字转换为ASCII
//LCD1602_Display(0xc1,q+0x30);
//sei();
//}
#ifndef__pid_h_
#define__pid_h_
#include<
string.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
intdError,Error;
/*pid初始化*/
structPID
floatSetPoint;
//设定目标DesiredValue
floatProportion;
//比例常数ProportionalConst
floatIntegral;
//积分常数IntegralConst
floatDerivative;
//微分常数DerivativeConst
floatSumError;
floatLastError;
//Error1[‐1]
floatPrevError;
//Error1[‐2]
}spid;
/***************PID结构体初始化*****/
voidPIDInit(structPID*pp)
memset(pp,0,sizeof(structPID));
/*****************PID参数设置******************/
voidsetPID(structPID*pp,floata,floatb,floatc)
pp->
Proportion=a;
Integral=b;
Derivative=c;
/***********PID计算部分***************************//////////////
//=====================================================================================================*/
unsignedcharPIDCalc(structPID*pp,unsignedcharNextPoint)
Error=pp->
SetPoint-NextPoint;
//偏差
if(fabs(Error)>
25)
TIMSK=0x01;
//timerinterruptsources不用中断,自动清0
return0xff;
}
elseif(fabs(Error)<
2)
return0x00;
else
TIMSK=0x03;
return(fabs(pp->
Proportion*Error));
//比例项
SIGNAL(SIG_OUTPUT_COMPARE0)//比较中断
PD5));
//后退
SIGNAL(SIG_OVERFLOW0)//溢出中断
TCNT0=0x01;
if(fabs(Error)<
3)//停止
if(Error<
-3)//前进
PORTD|=((1<
if(Error>
3)//后退
}
_delay_ms(10);
#endif
/*///////////////////////////////////////////////
///////定时器TO的使用例程——快速PWM模式/////////
//作者:
宝山
//时间:
2008.06.02
//编译环境:
ICCV7forAVR
//晶体:
11.0592Mhz
///////////////////////////////////////////////*/
/*头文件*/
#definenop()asm("
nop()"
)
voidport_init(void)
DDRB|=_BV(PB3);
//PB3为PWM输出
voidtimer0_init(void)
TCCR0=0x00;
//stop
//OCR0=0x01;
//改变此值可改变占空比
//OCR0=0x0f;
TCCR0=0x4D;
//设置为快速PWM模式,匹配时OC0置1,分频系数1024,比较发生时清0
//频率计算公式:
fOCn=fclk/(N*256)
//N=1024
//fOC0=11059200/(1024*256)=42.1875Hz
//在PB3管脚输出占空比可调,频率为42.1875Hz的PWM信号
//通过改变分频系数N改变频率
voidinit_devices(void)
//cli();
//disableallinterrupts
port_init();
timer0_init();
MCUCR=0x00;
GICR=0x00;
//sei();
//re-enableinterrupts
//allperipheralsarenowinitialized
/************************************************
文件:
ad.h
***********************************************/
#ifndef_ad_H_
#define_ad_H_
#include"
//*****************************ad转抑换**********************************************//
//ad初始化
voidad_Init(void)
ADMUX=0X00;
//外部参考电压,0通道
ADCSRA|=_BV(ADEN)|_BV(ADIE);
//|_BV(ADPS2)|_BV(ADATE);
//使能ADC,中断允许,自由模式,时钟:
ck/16////自动触发
ADCSRA|=_BV(ADSC);
//自由模式开始转换
DDRA&
=~(_BV(PA0));
chaoshenbo.h
用途:
超声波传感器
#ifndef_chaoshenbo_H_
#define_chaoshenbo_H_
#defineTX(1<
PA0)
#defineRX(1<
PA1)
//超声波模块初始化
voidchaosheninit(void)
DDRA|=TX;
//pB0设置为输出
=~RX;
//pB1设置为输入
PORTA=0X00;
//写指令
voidStartModule()//启动模块
PORTA|=TX;
TCNT1H=0X00;
TCNT1L=0X00;
//初值//启动一次模块
_delay_us(15);
PORTA&
=~TX;
//液晶显示程序
#ifndef_lcd_h_
#define_lcd_h_
#defineRSPB0
#defineRWPB1
#defineENPB2
voidLCD1602_Initial(void)
DDRB=0xff;
PORTB=0xff;
DDRC=0xff;
PORTC=0xff;
LCD1602_CommandWrite(0x38);
//功能设置两行显示,5*7
_delay_ms
(1);
LCD1602_CommandWrite(0x01);
//清屏,回到时80
LCD1602_CommandWrite(0x06);
LCD1602_CommandWrite(0x0c);
//关光标闪烁
/*1602写命令字子函数*/
voidLCD1602_CommandWrite(ucharcom)
LCD1602_BusyCheck();
PORTB&
=~(1<
RS);
//RS引脚置为低电平,写命令字节
PORTC=com;
//将数据送到8位并行数据口
PORTB|=(1<
EN);
//EN引脚电平上升将命令字写入1602内部
//延时5ms,保持EN电平
//时钟脉冲复位,准备下一次写操作
/*1602写数据子函数*/
voidLCD1602_ByteWrite(uchardate)
//RS引脚高电平,准备写数据字节
PORTC=date;
//EN引脚上升将数据字节写入1602
/*在某位置显示某字符,参数adr为待写地址,date为待写字节*/
voidLCD1602_Display(ucharadr,uchardate)
LCD1602_CommandWrite(adr);
LCD1602_ByteWrite(date);
voidLCD1602_BusyCheck(void)
PORTC=0XFF;
DDRC=0x00;
RW);
_delay_us(5);
//while(PINC&
0X80);
_delay_ms
(2);
voiddisstring(uchar*pp)
ucharm=0;
for(;
m<
7;
m++)
{LCD1602_Display(0xC0+m,*pp++);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PWM 超声波 小车
