智能车---stc8学习笔记1

发布时间 2023-09-07 13:11:10作者: 仲裁45

采集状态,调整车身--控制电机,传感器获取偏差信息,根据控制逻辑实现电机驱动,采集决策

执行

 

 

电源电路,稳压电路,保护

时钟电路,给单片机提供时钟,心跳,而且确定了单片机工作的速度

复位电路,上电重启

 

 

 

 

串行是一串一串发送数据

定时器:很多事情不是来了才做,有一个周期

通道对应着引脚

 

 

周期短,频率高--10khz,有惯性的都能控制.pwm引脚外接电容,可以起到形成一条直线的作用

,频率非常高一半高一半低,滤成一条直线,输出2.5v.

Pca,可编程定时器(功能比较杂)--ccp

Dma自动数据存储

  1. 中断(重要)

 

 

Int0-4外部中断

T0-4定时器--定时器中断

Uart1-4---串口中断  就着三种要用

 

  1. 引脚,最基本的都是io功能,旁边/是通过复用实现(pwm1_2第一个通道的第二个选择)

1个引脚只能有一个功能,一个通道好像只能选一个.针对性用功能即可.

 

寄存器:规定好的小开关,举例pwm0如何选择引脚输出,假设两个小开关,产生四种变化.

00 10 01 11//p20-00,p21--01,p22--10,11全部输出,所以一个通道只能有一个输出,各种各样功能都是靠内部小开关实现,小开关通过程序写状态,写的东西叫寄存器,小开关装在寄存器里面

P7寄存器,控制p70-p77七个引脚的输出,1输出5v,0是一v,人操作小开关作用各种电路实现功能,有些寄存器当成io输出,有些寄存器配置某些功能

程序->寄存器->电路->输出(效果),与或非操作不可位寻址的寄存器

一个寄存器八位

 

 

P3m0,p3m1控制p3^0的模式选择(准双向,输出(推挽模式),输入(高阻态模式),开漏模式.

上电默认输入模式.先变成准双向,然后再变成其他模式

 

 

 

寄存器封装成库函数,告诉函数想要哪个引脚变成哪个模式,调用即可,不可位寻址只能用与或非操作

 

 

 

硬件,分析传感器是啥,控制器是啥,执行装置是啥---(先分析电源,跟着电走)开关控制是否供电

二极管只允许电流往一端流(隔离作用).电机启动时候电流比较大.vcc电池电压可能会波动,为了避免波动,接电容(一个大一个小)起到滤波作用,电容看作蓄水池,大电容滤波动中低频,小电容滤高频.2脚输出,接二极管,电感,电容(组成lc电路滤波),经过这些小车上就会有5v的电输出.有了5v后就围绕单片机看(有了电源才能工作)

Ir接光电传感器(p0口功能比较弱)

P17adc,把模拟信号的电压量转换为数字信号

P2输出pwm1-4,inainb控制电机正转反转,全桥驱动电路,给了pwm1正转,0不转,调速

3-5欧电阻--10khz,一百多欧--频率低点,记住永远有一路信号为0

 

 

S0int0(优先级高),执行中断,可以打断当前程序执行另一个程序后返回,确认发车(优先级高)

1a2a1b2b测速电路,玩的都是pwm,速度有了位置和加速度就有了(d触发器,检测正反转时候相位不同,领先正转,落后反转,计数器数来的脉冲,外部中断电压跳变.

悬空时候单片机内置上下拉电阻

串口读超声波数据

Buzz功率放大电路,舵机需要一个0.5ms(-90)-2.5ms(90)的脉宽信号,总的周期为20ms(50hz),0.160

while(1)

    {

        delay(10);

        key_num<<=1;

        key_num+=KEY;

        if(key_num==0)//存储八十ms内我的按键状态 ,一直是稳定的0,按下去

        {

            LED=!LED;

            while(!KEY);

            

        }

按键轮询(无法实现别的功能,循环的时候程序动不了),如果要实现更多功能

单片机不建议把重要的程序写在大循环里,有另外一套重要的机制--中断机制

 

外部中断,当出现跳变沿时候,单片机能对其进行捕获并且产生一个中断.

定时器中断,计数器数到某个数时候,触发中断,执行某个程序,周期性的做某个事情可以用

串口中断:通信时候用的

 

 

It0是检测双边沿,it1是检测下降沿,检测后中断标志位ie01,ea大门和ex0小门控制是否允许中断,px0控制优先级

按键按下触发,中断设置为下降沿

按下不管程序运行到哪,先跳出来运行中断程序,完成后回到现场

void INT0(void) interrupt 0;

(命名可以自定义) (中断号只有一个)

注意,按一下不是直接触发,而是把中断标志位ie01然后触发(允许控制)(触发后ie=0,如果又变成1,会再次触发中断)

 

定时器/计数器,周期性循环(写到while会一直执行).如果想让东西不受影响的运行,用定时器

定时器针对的是系统内部时钟送来的脉冲(24M太高,一般用分频,计数器针对单片机外部引脚的脉冲(例如判断按键按了多少下)

 

 自动重装载(做比较规律的事情),能一直数(完成后从我们给定的数接着开始),不可自动重装载,数完等程序告诉我们从哪个地方数

 

 TH0和TL0存储数据(16位计数器,装数RL_TH0,RL_TL0),数满后把TF0定时器中断标志位

置1,执行中断(触发完成后TF0硬件清零,回到RL_TH0之前记的数字,重新开始数)

定时器不建议用50us这样的计数,一般是10ms这样

小车进行重要决策一般是放在定时器里面,不重要的放在主循环(主要时间都在主循环)