欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    小车直立程序.doc

    • 资源ID:2954998       资源大小:24.50KB        全文页数:7页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    小车直立程序.doc

    #include <hidef.h> /* common defines and macros */#include <MC9S12XS128.h> /* derivative information */#include <stdio.h>#include <math.h>#include <stdlib.h>#pragma LINK_INFO DERIVATIVE "mc9s12xs128" uchar i=0; char k,z=0; float fP, fI; void delay(unsigned int h) unsigned int j,tk; for(tk=0;tk<h;tk+) for(j=0;j<100;j+); /设置时钟 24mvoid pllclk(void)/24MHz ,外部时钟为 16MHzCLKSEL=0X00;PLLCTL=0xe1;SYNR=0xc7;/PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)REFDV=0x81;PLLCTL=0X60;asm NOP;asm NOP;asm NOP;while(CRGFLG&0X08)=0);/ 时钟校正同步CLKSEL=0X80;/设置中断5msvoid initPIT(void)/ 定时中断初始化函数 50MS 定时中断设置PITCFLMT_PITE=0; / 定时中断通道 0 关PITCE_PCE0=1;/ 定时器通道 0 使能PITMTLD0=160-1;/逼鞒踔瞪瓒?240 分频,在 24MHzBusClock 下,为 0.1M/即10us.PITLD0=2000-1;/16 位定时器初值设定。 PITTIME*0.01MSPITINTE_PINTE0=1;/ 定时器中断通道 0 中断使能PITCFLMT_PITE=1;/ 定时器通道 0 使能/ad初始化void ADC_Init(void) /printf("ADC_Initn"); ATD0CTL1=0x40; /7:1-外部触发,65:00-8位精度,4:放电,3210:ch ATD0CTL2=0x40; /禁止外部触发, 中断禁止 ATD0CTL3=0xC0; /右对齐无符号,每次转换8个序列, No FIFO, Freeze模式下继续转 ATD0CTL4=0x05; /765:采样时间为4个AD时钟周期,ATDClock=BusClock*0.5/PRS+1 ATD0CTL5=0x20; /6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样 ATD0DIEN=0x00; /禁止数字输入 /pwm初始化void PWM() PWMPRCLK=0X11; /对总线时钟进行预分频,总线时钟为 8M,分频后为500K PWMCLK=0x0f; /设 sA sb为其时钟源 PWMSCLA=0X05; PWMSCLB=0X05; /A时钟为 2000Hz PWMPOL=0X00;/上升沿翻转 PWMCAE=0X00;/左对齐输出 PWMPER0=0XF0; PWMPER1=0XF0; PWMPER2=0XF0; PWMPER3=0XF0; PWMCNT0=0X00;/0通道计数器清 0 PWMCNT2=0X00; int getad(char m) int ad; ATD0CTL5=(0X20+m); while(!ATD0STAT0_SCF); switch(m) case 0:ad=ATD0DR0; case 1:ad=ATD0DR1; case 2:ad=ATD0DR2; case 3:ad=ATD0DR3; case 4:ad=ATD0DR4; return ad;float filter(char n) float sum = 0; char count; int jieguo; for ( count=0;count<10;count+) jieguo= getad(n); sum = sum+jieguo; asm NOP; asm NOP; sum=sum/10; return sum;void SpeedControl(void) float fDelta; int g_fCarSpeed; g_fCarSpeed=PACNT; PACNT=0X0000; g_fCarSpeed =g_fCarSpeed; fDelta =0-g_fCarSpeed; fP = fDelta*1.2; /SPEED_CONTROL_P; fI = fDelta*0.001;/ SPEED_CONTROL_I; void PACAInit() PACTL=0X50; PACNT=0X0000;void main() float gry=0,gav=0,gry1,gry11; float carangle=2,gavangle,pouty,poutz; float p,h; int dianjiy,dianjiz,g_nSpeedControlCount=0; int zuo,you,cha; DDRB=0XFD; PORTB=0X00; PORTB_PB0=1; pllclk(); initPIT(); ADC_Init(); PACAInit(); PWM(); PWME=0x00; if(PORTB_PB1=0) gry1=1185; else gry1=1200; /delay(3000); /gry1=filter(2); /gry1=filter(2)+gry1; /gry1=filter(2)+gry1; /gry1=filter(2)+gry1; /gry1=filter(2)+gry1; /gry1=filter(2)+gry1; /gry1=gry1/6; gry11=filter(0); gry11=filter(0)+gry11; gry11=filter(0)+gry11; gry11=filter(0)+gry11; gry11=filter(0)+gry11; gry11=filter(0)+gry11; gry11=gry11/6; delay(1000); EnableInterrupts; for(;) if(z=1) zuo=filter(2); you=filter(3); cha=you-zuo; cha=cha/4; z=0; if(i=1) gry=filter(0); gry=gry11-gry; gry=gry*0.42; gav=filter(1); gav=gry1-gav; gavangle=gav/7-fI; /jiaodu=(gavangle-carangle)/4; /carangle=carangle+(gry+jiaodu)/200; carangle=carangle+gry/200; p=p+0.0025; h=p/(p+60); carangle=carangle+h*(gavangle-carangle); p=(1-h)*p; /if(carangle>0) / PORTB_PB3=1; /else /PORTB_PB3=0; g_nSpeedControlCount +; if(g_nSpeedControlCount>=20) SpeedControl();待添加的隐藏文字内容3 g_nSpeedControlCount = 0; pouty=carangle*32+gry*1.4-fP-cha;poutz=carangle*32+gry*1.4-fP+cha;dianjiy=(int)pouty; dianjiz=(int)poutz;PWME=0x00; if(dianjiy>0) k=1; if(carangle>30) dianjiy=0; if(dianjiy>240) dianjiy=240; PWMDTY1=240-dianjiy; PWMDTY0=240; else k=-1; if(carangle<-30) dianjiy=0; if(dianjiy<-240) dianjiy=-240; PWMDTY1=240; PWMDTY0=240+dianjiy; if(dianjiz>0) k=1; if(carangle>30) dianjiz=0; if(dianjiz>240) dianjiz=240; PWMDTY2=240-dianjiz; PWMDTY3=240; else k=-1; if(carangle<-30) dianjiz=0; if(dianjiz<-240) dianjiz=-240; PWMDTY2=240; PWMDTY3=240+dianjiz; PWME=0X0f; i=0; #pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt 66 PIT0(void) i+ ;z+;PITTF_PTF0=1;

    注意事项

    本文(小车直立程序.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开