飞思卡尔入门程序总结

飞思卡尔入门程序总结
飞思卡尔入门程序总结

1.对IO口输入输出操作程序举例:A口接流水灯并实现闪烁

void main(void) {

while(1)

{

DDRA=0xff;

delay(500);

PORTA=0xff;

delay(500);

PORTA=0;

}

另外,B、E口的IO功能操作也是一样的,因为位数一样寄存器一样,其他口的寄存器就不太一样了!J,P,M,T,S这五个口除具有数据寄存器外,他们都另外多出另一个端口输入寄存器(该寄存器功能我未知)!

2.SPI总线接口

SPI是一种高速高效的同步串行接口,这种接口主要用于MCU与外部的接口芯片交换数据,只要有SPI口的芯片都可以与单片机相连形成主从机系统进行数据的传递,比如SPI用于移位寄存器74HC164,这是个串入并出的芯片这样可以实现扩展IO口。

还有AD转换芯片AD7793,可以实现数模转换,还有飞思卡尔公司的电源管理芯片MC33389。

因设备有限此功能待以后调试!

3.SCI总线接口

MC9S12DG128单片机有两个SCI模块,可以选用其中任何一个。他的使用有8个相应寄存器共设置,其中有波特率设置寄存器SCIBDH,SCIBDL,还有控制寄存器SCICR1,SCICR2,状态寄存器SCISR1,SCISR2,数据寄存器SCIDRH,SCIDRL;

简单讲SCI的使用就是寄存器初始化,数据传送方式设置,下面举个初始化使用的简单例子:SCICR2=0x08;//发送使能设置

SCIBDH=0x00;//波特率设置为9600

SCIBDL=0x9c;

就是这样这个是简单实用时的设置,发送函数如下:

While(!(SCISR1&0x40))//检测是否发送完毕,一旦发送完毕就进入到死循

环里边

{}

SCIDRL=C;//C代表需要传送的数据

4.有关定时器TCNT

TCNT是芯片内部的16位主定时器,他不停地对内部时钟信号进行计数,从0x0000直到0xffff,计满后溢出又返回到0x0000,程序随时可以读取,但在普通模式下禁止写入。

TCNT应该按字访问,分别访问高低字节将出现错误!

可以直接利用它的来实现一些延时的功能!

例如下面的程序:

#include

#include "derivative.h"

void TimerOverflow()

{

unsigned char i=1,j=0x80;

while((i!=0)&&(j!=0))

{

PORTB=~(i|j);

i<<=1;//B口实现流水的移位操作

j>>=1;

while(TCNT!=0x0000);//对比定时器寄存器

while(TCNT==0x0000);

}

}

void main(void)

{

EnableInterrupts;

TSCR1=0x80;//定时器使能

TSCR2=0x06;//设置时钟预分频为64

DDRB=0xff;

PORTB=0xff;

for(;;)

{

TimerOverflow();

}

}

5.系统时钟锁相环

锁相环的初始化比较麻烦,与此相关的控制寄存器有:

锁相环控制寄存器PLLCTL

时钟合成寄存器SYNR,有效值为0-63

时钟分频寄存器REFDV,有效值为0-15

时钟产生模块的标志寄存器ORGFLG

时钟选择寄存器CLKSEL

锁相环初始化的步骤为:时钟选择寄存器清零(不使能锁相环,该功能有CLKSEL的最高位控制,即CLKSEL=0x00)——锁相环电路允许设置(该功能由PLLCTL的第6位控制,将其置1即可,注意该寄存器的设置必须进行位操作)——然后就是对SYNR和

REFFV进行赋值,根据公式设定总线时钟fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)——然后延时几个总线周期以等待时钟频率稳定——判断时钟频率是否稳定(该

功能与ORGFLG有关,当该寄存器的LOCK位,第3位为1时表明频率已经稳定,故该处用一判断语句设置)——最后就是允许锁相环时钟作为系统时钟了(该功能由CLKSEL的最高位控制,置1即选定)

举个例子:

设置总线频率为24MHz

CLKSEL=0x00;

PLLCTL|=0x40;

SYNR=2;

REFDV=1;

Delay();

While(!(CRGFLG_LOCK==1)) ; 或while(!(CRGFLG&0x08==0x08)) ;

CLKSEL|=0x80;

这样一个锁相环程序就完成了,设置的总线频率为24M;

6.定时器溢出中断的使用

下面简单介绍一下使用中学到的,首先锁相环程序的首次使用成功

例如:

void clock_init()//24M锁相环时钟

{

uchar m=0;

CLKSEL=0x00;//时钟选择寄存器清零,不使能锁相环时钟

PLLCTL|=0x40;//锁相环控制寄存器第6位置1,允许使用锁相环

SYNR=2;

REFDV=1;

m++;//延时以使锁相环时钟稳定

m++;

m++;

while(CRGFLG&0x08==0x08)

CLKSEL|=0x80;//当判断时钟稳定时,时钟选择器第7位置1,使能锁相环时钟}

下面介绍定时器溢出使用的初始化程序

例如:

void timerout_init()//定时器初始化

{

TSCR1|=0x80;//定时器允许工作

TSCR2|=0x80;//定时器溢出中断允许

TSCR2|=0X07;//时钟128分频

EnableInterrupts;//使能中断

}

还有相应的中断服务程序

例如:

#pragma CODE_SEG NON_BANKED

void interrupt 16 timeout_int()

{

t++;

TFLG2|=0x80;//定时器器溢出标志位置位

if(t==5)

{

t=0;

PORTB=~PORTB;

EnableInterrupts;

}

}

这个程序让我知道了定时器溢出中断的使用方法,为我今后进行别的模块的学习打下了好的基础,也使我更加有信心!!

7.所谓输入捕捉功能

在输入捕捉模式下,相应的输入捕捉通道通过捕捉该管教上的电平变化发出锁存信号,将该时刻计数器的值锁存到捕捉寄存器中,通过连续的测量,记录下每次锁存的值就可以计算出脉冲的宽度或者周期信息。

如果配合输出比较功能,还可以产生一段时间的延迟,例如:当需要在一个外部事件发生一定时刻后,单片机产生一个输出信号来控制某个操作。这既可以利用输入捕捉来记录外部事件发生的时刻,把这个时间加上一定的延时值送到输出比较寄存器,并允许输出比较功能就可以达到延迟目的!!

首先介绍不带缓冲的输入捕捉通道:

HCS2增强型定时器中共有8个输入捕捉通道,其中4个(PT4~PT7)和普通的输入捕捉通道一样,带有一个捕捉寄存器用来记录管教上的电平变化时自由计数器的锁存值。当ICOVW寄存器的NOVWx位清零时,每发生一次输入捕捉,新的计数器的值就会覆盖原来的输入捕捉寄存器的内容;当该位置1时,除非输入捕捉寄存器为空,否则新的值不能写入(使输入捕捉寄存器为空的方法就是读取该寄存器)。这样就避免了新的计数值覆盖旧的计数值。

带缓冲的输入捕捉通道:

另外4个带缓冲的输入捕捉通道(PT0~PT3),除了带有捕捉寄存器之外,还有一个保持寄存器,可以在不产生中断的条件下连续记录两次自由计数器的值。他有两种工作方式,锁存方式:当模数计数器减为0,向模数计数器写入“$0000”或写强制锁存位ICLAT时,输入捕捉计数器值将锁存到相应的通道的保持寄存器中,并将输入捕捉计数器清零。当ICOVW寄存器的NOVWx位清零时,每次发生输入捕捉事件时,新的计数值将覆盖旧的输入捕捉寄存器值,如果是锁存方式,则保持寄存器中的内容将被更新。

当该位置1时,除非输入捕捉寄存器或是保持寄存器为空,否则新的计数器的值将不能写入。队列方式:当ICOVW寄存器的NOCWx位清零时,每发生输入捕捉事件,输入捕捉寄存器的值将被写入保持寄存器中,新的计数器的值将记录在输入捕捉寄存器中。当该位置1时,除非输入捕捉寄存器或是保持寄存器为空,否则新的计数值竟不能写入。

8.输入捕捉使用总结。

测试了一下通道4的输入捕捉功能,但最终还是多方了解资料才最终得以成功!

主要是初始化程序,示例如下:

void catch_in4_init()//不带缓冲输入捕捉初始化

{

TIOS=0x00;//设置通道为输入捕捉方式

TSCR1=0x80;//使能定时计数器工作

TSCR2=0x07;//设置时钟128分频

TCTL3=0x03;//设置通道4为上升下降沿都捕捉

TIE=0x10;//使能通道4捕捉中断

EnableInterrupts;//使能全局中断

}

中断服务程序也很重要,最主要就是不能少了两个标志位清零的语句,示例如下:

#pragma CODE_SEG NON_BANKED

void interrupt 12 catch_in4_()

{

TFLG2=0x80;//指示中断发生时刻的中断标志位清零

TFLG1=0x10;//指示中断发生通道标志位清零------这两个标志寄存器不一样

t++;

if(t==5)

{

t=0;

PORTA|=0x55;

PORTB=~PORTB;

delay();

}

EnableInterrupts;

}

就这样吧,一个简单的输入捕捉的程序就完整了!

9.PWM

初始化程序流程是

允许PWM——选择PWM时钟——选择极性对齐方式——选择周期脉宽占空比——计数器清零开始计数

PWM的应用,把初始化程序都写好后,把占空比的值设置为一个变量赋予的形式,这样每次需要调速的时候只用调用这个函数,改变一下占空比就行啦!

舵机的调速要实现平滑就要在调速的时候给定量一点一点变化!这个有待调试!!10.脉冲累加器A的使用

首先是初始化

控制寄存器:使能16位脉冲累加器,选择工作模式(用到编码器上,则是用事件计数模式),有效边沿设定,时钟选择。

脉冲累加计数寄存器:这个用于记录事件计数的个数,溢出时能够产生中断。

下面给出使用的初始化程序:

飞思卡尔单片机LED控制例程详解

我的第一个LED程序 准备工作: 硬件:Freescale MC9S08JM60型单片机一块; 软件:集成开发环境codewarrior IDE; 开发板上有两个LED灯,如下图所示: 实验步骤: 1.首先,确保单片机集成开发环境及USBDM驱动正确安装。其中USBDM的安装步骤如下:?假设之前安装过单片机的集成开发环境6.3版本:CW_MCU_V6_3_SE; ?运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下: 1〉C:\ProgramFiles\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件 USBDM_JMxxCLD_V4.sx是下载器的固件文件; 2〉C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb 驱动 所以在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动 安装位置到以上目录即可。 ?运行USBDM_4_7_0i_Win之后,还会在目录: C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi 下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior 集成开发环境下对usb下载器的调试、下载的支持。

2.新建一个工程,工程建立过程如下: ?运行单片机集成开发环境codewarrior IDE ?出现如下界面 ●Create New Project :创建一个新项目工程 ●Load Example Project :加载一个示例工程 ●Load Previous Project :加载以前创建过的工程 ●Run Getting started Tutorial:运行CodeWarrior软件帮助文档 ●Start Using CodeWarrior:立刻使用CodeWarrior ?点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面 如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

飞思卡尔--智能车舵机讲解

飞思卡尔--智能车舵机讲解

2.2 舵机的安装 完成了玩具车的拆卸之后要做的第二步就是安装舵机,现在市场上卖的玩具车虽然也具有转向 功能,但是前轮的转向多是依靠直流电机来驱动,无论向哪个方向转都是一下打到底,无法控制转 过固定的角度,因此根据我们的设计需求,需要将原有的转向部分替换成现有的舵机,以实现固定 转角的转向。舵机的实物图如图 2.1所示。 需要说明的是由于小车系玩具车改装,在安装舵机是需要合理的利用小车的结构,将舵机安装 牢固,同时还需注意合理利用购买舵机是附赠的齿轮,从而将舵机固定在合适的位置。舵机的安装 方式有俯式、卧式多种,不同的安装方法力臂长短、响应速度都有所不同,这一点请自己根据实际 情况合理选择,图 2.2 为舵机的安装图。 5

图 2.1 舵机实物图图 2.2 舵机安装图 舵机安装过程中有一点需要尤其注意,由于舵机不是360°可转的,因此必须保证车轮左右转 的极限在舵机的转角范围之内。 舵机安装完毕之后就可以对小车的转角进行控制了,但是由于玩具车的车体设计往往限制了小 车的转角,因此可以对小车进行局部的“破坏”来增大前轮的转角,要知道在比赛中追求速度的同 时一个大的转角对小车的可控性会有一个很大的提升,如图2.3 所示,就是对增加小车转角的一个 改造,这是我在去年小车比赛中的用法。将阻碍前轮转角的一部分用烙铁直接烫掉。 但是这种做法也有风险,由于你的改造会破坏小车的整体 7

结构,有可能会对小车的硬件结构造 成破坏,因此如果你的小车在改造之后显得过于脆弱的话那你就要对你的小车采取些加固措施了。 3.4 舵机转向模块设计 舵机是小车转向的控制机构,具有体积小、力矩大、外部机械设计简单、稳定性高等特 点,无论是在硬件还是软件舵机设计是小车控制部分的重要组成部分,舵机的主要工作流程 为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。图 3.11 为舵机的实物图。 7

飞思卡尔单片机知识点

1、单片机组成:1> CPU 2> 存储器3>I/O ; 2、存储器包括2大类:ROM , RAM 3、标准ASCII码使用(1)个字节表示字符; 4、BCD码是用()进制表示的()的数据; 5、HCS08QG8的最小系统包括(电源电路,复位电路,下载口,(内部时钟)); 6、QG8管脚数量(16)、只能输入的是(PTA5)、只能输出的是(PTA4)、程序下载的是、接外部时钟的是; 7、QG8的管脚可以作为数字输入输出、也可以作为模拟输入,可以作为模拟输入的有(); 8、QG8管脚复用优先级最低的功能是(I/O); 9、QG8存储器配置中,不同资源的分界线……; 10、CPU寄存器有(A, HX, PC, CCR, SP); 11、可以执行位操作的地址范围(0X0000~0X005F); 12、有地址的寄存器分成了(3)块(0页,高页,非易失); 13、如何在C语言中定义常数(数据类型变量名;),如何指定变量的地址(数据类型变量名@ 地址;); 14、堆栈的管理者是寄存器(SP); 15、SP的复位缺省值是(0X00FF); 16、堆栈对数据的操作特点是(向上生长型:先压后涨、先减后弹); 17、堆栈一般在RAM的高地址区域还是低地址区域?高地址区 18、内部时钟源包括哪4大部分? 19、外部时钟分哪2大类;振荡器,整形外部时钟 20、内部时钟中FLL固定倍频(512倍频); 21、ICS的7种工作模式(FEI, FEE, FBI, FBILP, FBE, FBELP, stop); 22、ICS的内部参考时钟是可以校准、微调的,调整的寄存器名(ICSTRM);该寄存器的数值越大,输出时钟频率越(低); 23、FLASH是按页管理的,页大小(512)字节,每页分(8)行; 24、高页寄存器位于FLASH的最后一页的(第六行/0xFFB0~0xFFBF)位置; 25、FLASH的最后一页最后一行是(中断向量); 26、FLASH块保护寄存器(FPROT);块加密寄存器(FOPT);对应的非易失寄存器分别是(NVOPT, NVPROT); 27、FLASH操作的一般过程是(); 28、FLASH操作的有效命令有(空检查,字节编程,突发模式编程,页擦除,全部ROM 擦除); 29、记录程序运行状态的CPU寄存器是(CCR); 30、指令系统包括6大类指令,分别是(算术运算指令、数据传送指令、数据和位操作、逻辑运算、程序控制、堆栈处理); 31、寻址方式是指(CPU访问操作数和数据的方法); 32、寻址方式包括7大类16种,分别是: INH IMM DTR EXT IX,IX1,IX2,SP1,SP2,IX+,IX1+ REL IMD, DD,IX+D,DIX+ 33、8指令模板和6指令模板分别是(); 34、QG8是高电平复位还是低电平复位?低电平 35、QG8数据存储器RAM的大小为(512)字节; 36、上电复位期间将管脚(A4)设置为(低)电平可以进入调试模式 37、QG8的存储器结构为冯·诺伊曼还是哈佛结构?冯诺依曼

飞思卡尔智能车摄像头组freescale程序代码

extern int left,w,top,h; extern HDC m_hdc; CBrush brush3(RGB(0,255,0)); CBrush brush4(RGB(255,0,0)); CBrush brush5(RGB(255,255,0)); #else #include #include "math.h" // #include "LQfun.h" #endif #ifdef ccd #define MAX_VIDEO_LINE 39 #define MAX_VIDEO_POINT 187 #else //#define MAX_VIDEO_LINE 26 // #define MAX_VIDEO_POINT 301 #define MAX_VIDEO_LINE 78 #define MAX_VIDEO_POINT 57 #endif extern unsigned char g_VideoImageDate[MAX_VIDEO_LINE][MAX_VIDEO_POINT]; #define INT8U unsigned char #define INT8S signed char #define INT16U unsigned int #define INT16S int #define INT32S int #define NO_DATA_180 254 //#define INT32U unsigned int unsigned char LIMIT=((MAX_VIDEO_POINT)/2); unsigned char MIDDLE[MAX_VIDEO_LINE]; #define MAX_BLACK_NUM 7 INT8S n;

飞思卡尔S12系列寄存器和中断讲解

S12的输入/输入端口(I/O口) I/O端口功能 可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。 设置I/O口工作方式的寄存器有: DDR、IO、RDR、PE、IE和PS。 DDR:设定I/O口的数据方向。 IO :设定输出电平的高低。 RDR:选择I/O口的驱动能力。 PE:选择上拉/下拉。 IE:允许或禁止端口中断。 PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。 I/O端口设置 1、A口、B口、E口寄存器 (1)数据方向寄存器DDRA、DDRB、DDRE DDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。 当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。 否则,A口、B口、E口为输出口。当DDRA、DDRB、DDRE的任何一 位置1时,则该位对应的引脚被设置为输出。 例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCR PUCR为8位寄存器,复位后的值为0。当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。 (3)A口、B口、E口降功率驱动控制寄存器RDRIV RDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降 (4)数据寄存器PORTA、PORTB、PORTE PORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。 由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

飞思卡尔智能车电磁组信号采集

?пㄖ ???? ??? ? ??? ?? ? ? 1? ? ??? ? 哖 世?? ???? ??? ??? ??? ? ??? ㄎ? ?? ??????仁??20kHz??????⌒ ???仁?VLF? ??⌒???仁仁?? ? 仁 ?仁??⌒????3kHz?30kHz?⌒?? 100km?10km? ?? 3.1?? ??? ? ? ?? ? ? ?а ? ?????? ??? ? ? ? ? ?? ??オ???? ??? ??? ? ? ??? ? ? ???о? ??? ??? ??? ? ? ? ? ?? ? ??? й ?????? ? ? ?? ? ???? ?н ????? ? ? на???? ??? ? ? ?? ? ? ?? а ? ???? ?? ??? ?? ? ??? ? ? ?? ?? ??? ??? ?? ??仁? ??? ?? ???? ??? ?? ?? ????? ?? ? ?? ?????? ↓ ? ?? ?? ↓ ? ?? ?? ??? ???? ? ??? ?? ? ? ?? ? ↓ ?? ?? ? ? ? ? ?? っ ?? ???/& ????? ??? ? ? ??/&? ?? ? ?

?йㄐ ???? ?? ?LC? ?? ? ? ?? ?? ? ?? ??????? ??? ??AD???? 享 ?? 儈?↓? фн?? ?? ???AD? ???? ? ?? ?? 3.3 ?? ?? ???????? ?? 傼 ??н ??? ? ? н ? ?? ?? ?н ? н? ? ? ??? ? ?? ?нっ ???? ?????? ? ф? 儈? ? ?

飞思卡尔智能车电磁组程序员成长之路(未完待续)

飞思卡尔智能车电磁组程序员成长之路 1.飞思卡尔智能车小车入门 智能汽车电磁组简介: 第五届全国大学“飞思卡尔杯”智能汽车竞赛新增加了“电磁组”。根据比赛技术 要求,电磁组竞赛,需要选手设计的智能车能够检测到道路中心线下电线中20KHz 交 变电流产生的磁场来导引小车沿着道路行驶。在平时调试和比赛过程中需要能够满足比 赛技术要求的 20KHz 的交流电源驱动赛道中心线下的线圈。同时参赛选手需要自行设 计合适的电磁传感器来检测赛道信息完成智能寻迹功能。 智能车制作是一个涵盖电子、电气、机械、控制等多个领域和学科的科技创新活动。简单点来说可以将其分为硬件电路(包括电源、MUC 控制部分、电机驱动、传感器)、机械、算法三方面的设计。电磁组在机械方面可以参照光电组的设计方案,这里不再赘述。本设计指导只讲述20KHZ 电源、电磁传感器设计方案以及部分算法。 智能车对单片机模块需求: 飞思卡尔单片机资源:

智能车涉及到IO模块,中断模块,PWM模块,DMA模块,AD模块等。在车模调试中还有必须的模块。如SCI模块、定时器模块,SPI模块等。其中还涉及到一些算法和数据的存储和搬移。一个好程序框架对智能车的制作过程中会达到事半功倍的效果。但是就智能车这样系统来说,如果完全专门移植一个操作系统或者写一个程序的bootload,感觉有一些本末倒置,如果有成熟的,可以借用的,那样会比较好。 2.电磁传感器的使用 20KHz电源参考设计方案: 电源技术指标要求: 根据官网关于电磁组赛道说明,20KHz 电源技术要求如下: 1.驱动赛道中心线下铺设的 0.1-0.3mm 直径的漆包线; 2.频率围:20K±2K; 3.电流围:50-150mA; 图 2.1 是赛道起跑区示意图,在中心 线铺设有漆包线。 首先分析赛道铺设铜线的电抗,从而得 到电源输出的电压围。我们按照普通的练习 赛道总长度 50m,使用直径 0.2mm 漆包线。在30 摄氏度下,铜线的电阻率大约为 0.0185 欧姆平方毫米/米。计算可以得到中心线的电阻大约为 29.4 欧姆。 按照导线电感量计算机公式: 其中 l, d 的单位均为 cm。可以计算出直径为 0.2mm,长度 50 米的铜线电感量为131 微亨。对应 20KHz 下,感抗约为 16.5 欧姆。

飞思卡尔智能车比赛电磁组路径检测设计方案

飞思卡尔智能车比赛电磁组路径检测设计方案电磁组竞赛车模 路径检测设计参考方案 (竞赛秘书处 2010-1,版本 1.0) 一、前言 第五届全国大学生智能汽车竞赛新增加了电磁组比赛。竞赛车模需要能够通 过自动识别赛道中心线位置处由通有 100mA 交变电流的导线所产生的电磁场进行路径检测。除此之外在赛道的起跑线处还有永磁铁标志起跑线的位置。具体要求请参阅《第五届智能汽车竞赛细则》技术文档。 本文给出了一种简便的交变磁场的检测方案,目的是使得部分初次参加比赛 的队伍能够尽快有一个设计方案,开始制作和调试自己的车模。本方案通过微型车模实际运行,证明了它的可行性。微型车模运行录像参见竞赛网站上视频文件。 二、设计原理 1、导线周围的电磁场 根据麦克斯韦电磁场理论,交变电流会在周围产生交变的电磁场。智能汽车 竞赛使用路径导航的交流电流频率为 20kHz,产生的电磁波属于甚低频(VLF) 电磁波。甚低频频率范围处于工频和低频电磁破中间,为 3kHz,30kHz,波长为 100km,10km。如下图所示: 图 1:电流周围的电磁场示意图

导线周围的电场和磁场,按照一定规律分布。通过检测相应的电磁场的强度 和方向可以反过来获得距离导线的空间位置,这正是我们进行电磁导航的目的。 由于赛道导航电线和小车尺寸 l 远远小于电磁波的波长,,电磁场辐射能量很小(如果天线的长度 l 远小于电磁波长,在施加交变电压后,电磁波辐射功率正比于天线长度的四次方),所以能够感应到电磁波的能量非常小。为此,我们将导线周围变化的磁场近似缓变的磁场,按照检测静态磁场的方法获取导线周围的磁场分布,从而进行位置检测。 由毕奥-萨伐尔定律知:通有稳恒电流 I 长度为 L 的直导线周围会产生磁场,距离导线距离为 r 处 P 点的磁感应强度为: 图 2 sin直线电流的磁场 , d, ,(0 , 4 10, 7 TmA 1 ) B , ,, cos,1 2 ,。 (1) ,1 4 r 由此得: B , cos, 4 r 4 r

飞思卡尔单片机各种功能程序

流水灯四种效果: #include /* common defines and macros */ #include #include /* derivative information */ #pragma LINK_INFO DERIV ATIVE "mc9s12xdp512" #include "main_asm.h" /* interface to the assembly module */ unsigned char temp; //unsigned char pa @0x200; //unsigned char pb @0x202; unsigned char key; static void delay(void) { volatile unsigned long i; for(i=0;i<100000;i++); } static unsigned char random; static void Random(void) { random = (unsigned char)rand(); } void effect1() { unsigned char c; for(c=0;c<=6;c++) { delay(); PORTB = ~(1<=1;c--) { delay(); PORTB = ~(1<=1;c--) {

飞思卡尔电机控制模块详解

M=2. 一、关键点 1、MC 模块驱动电机的PWM 波频率在20K 左右时效果比较好。DITH 位等于0时,计算方法如下: DITH=1时, 其中,左对齐和有对齐方式下 M=1,中间对齐是2、MC 模块定时计数器的中断最好禁止,如果开启,在相应的中断服务程序中至少要添加一条“清楚中断标志位”的指令。 3、电机控制模块共8个通道,每个通道有2个Pin 脚组成。 4、Fast 位控制精度,7位或者11位。 5、给周期寄存器写入数值,可启动 MC 计数器,写0关闭所有通道的计数器。 6、MCAM[1:0]写入0x00可关闭某个channel ,写入非零值不是启动MC 计数器,而是控制对齐方式。为了精确周期寄存器的值应尽量大,Ftc 应尽量小。 二、寄存器寄存器讲解讲解讲解:: 1 MCCTL0 (Motor Controller Control Register 0) 第7位保留; 第6、5位是MCPRE[1:0]控制电机控制器定时计数器时钟f TC 预分频系数。如下: 第4位 MCSWAI 置1,等待模式中电机控制器正常运行,清0,在等待模式中电机控制模块时钟关闭。 第3位,FAST ,清0,电机控制器PWM 模块占空比寄存器分辨率设置为11位,置1,电机控制器PWM 模块占空比寄存器分辨率设置为7位。 第2位,DITH ,清零,电机控制器dith 特性禁止,置1电机控制器dith 特性使能。 第1位保留; 第0位MCTOIF ,为1表示,电机控制模块定时计数器溢出;为0,表示自上次复位或清零以来,电机控制模块定时计数器没有发生溢出。 2 MCCTL1 (Motor Controller Control Register 1)

飞思卡尔 电磁组

第十届“飞思卡尔”杯全国大学生 智能汽车竞赛 技术报告 学校:常熟理工学院 队伍名称:物电电磁二队 参赛队员:梅亚军、沈锦杰、黄志鹏、张峰 带队老师:徐健、顾涵

关于技术报告和研究论文使用授权的说明 本人完全了解第十届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。 参赛队员签名: 带队教师签名: 日期:

摘要 本文介绍了常熟理工学院物电电磁二队电磁车的成果。智能车的硬件平台采用带MK60DN256Vll10处理器,软件平台为IAR Embedded Workbench开发环境,车模采用大赛组委会统一提供的两辆B型车模。 文中介绍了智能车机械结构调整,传感器电路设计,舵机、电机控制算法以及起跑线的检测等。车模以MK60DN256Vll10单片机为控制核心,以安装在车体前的工字电感作为循迹传感器,采用干簧管检测起跑线,以欧姆龙编码器检测速度信息。车模系统的简单工作原理是MK60DN256Vll10单片机通过AD口采集电感检测的拟量,并通过算法处理,然后返回值用于舵机控制,根据编码器返回值进行电机的闭环控制。通过串口,借用蓝牙等工具进行舵机PD参数,电机PID的调节,以及整定传感器参数的整合处理,再通过数字红外进行两车之间联系,保持车距。 关键字:机械结构、电磁寻线、舵机PD控制、电机PID控制

目录 第一章总体方案设计------------------------------------------------------------------------------------------- 6 第二章智能车机械结构调整与优化 ------------------------------------------------------------------------ 9 2.1 主销内倾 ---------------------------------------------------------------------------------------------- 9 2.2 主销后倾 -------------------------------------------------------------------------------------------- 10 2.3 外倾角 ------------------------------------------------------------------------------------------------ 11 2.4车轮安装示意图如下:---------------------------------------------- 12 2.5 舵机的安装----------------------------------------------------------------------------------------- 12 2.6 舵机安装示意图如下: ------------------------------------------------------------------------- 13 2.7 小结 --------------------------------------------------------------------------------------------------- 13 第三章电路设计说明 --------------------------------------------------------------------------------------- 14 3.1 电源模块--------------------------------------------------------------------------------------------- 14 3.2 传感器模块------------------------------------------------------------------------------------------ 15 3.3 电机模块--------------------------------------------------------------------------------------------- 15 3.4 舵机模块--------------------------------------------------------------------------------------------- 16 3.5 最小系统板设计 ----------------------------------------------------------------------------------- 16 3.6 系统主板设计 -------------------------------------------------------------------------------------- 17 3.7 小结 --------------------------------------------------------------------------------------------------- 18 第四章智能车控制软件设计说明 ------------------------------------------------------------------------- 19 4.1 软件设计总体框架 -------------------------------------------------------------------------------- 19 4.2 电机PID控制 -------------------------------------------------------------------------------------- 20 4.3 舵机的控制----------------------------------------------------------------------------------------- 24 4.4 传感器数据的处理 -------------------------------------------------------------------------------- 24 4.5 小结 --------------------------------------------------------------------------------------------------- 24 第五章开发工具、制作、安装、调试过程说明 ------------------------------------------------------ 25 5.1 软件编译环境 -------------------------------------------------------------------------------------- 25 5.2 显示模块 -------------------------------------------------------------------------------------------- 25 5.3 蓝牙调试模块-------------------------------------------------------------------------------------- 26 5.4 上位机调试----------------------------------------------------------------------------------------- 26 5.5 本章小结 -------------------------------------------------------------------------------------------- 27 模型车的主要技术参数说明 --------------------------------------------------------------------------------- 28 结论 ---------------------------------------------------------------------------------------------------------------- 29 参考文献 ---------------------------------------------------------------------------------------------------------- 31 附录A:程序源代码 ------------------------------------------------------------------------------------------ 32

飞思卡尔HC12系类AD转换模块讲解

Freescale HCS12 微控制器
TM
Freescale Semiconductor Confidential and Proprietary Information. Freescale? and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. ? Freescale Semiconductor, Inc. 2005.

A/D转换模块 转换模块
ATD 1 ATD 0 12K SRAM 256K FLASEEPROM
SCI 1
SCI 1
Internal Bus
SPI 2 SPI 1 or or PWM PWM PWM SPI 0 8 CH CH CHAN 4-7 0-3 BKP INT MMI
Star12 CPU
CM
SIM
BDM
MEBI PIT
PIM PLL
msCAN 4 or IIC
msCAN 3
msCAN 2
msCAN 1
BDLC or msCAN 0
4K BYTES EEPROM
ECT 8 CHAN
Slide 1
TM
Freescale Semiconductor Confidential and Proprietary Information. Freescale? and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. ? Freescale Semiconductor, Inc. 2005.

飞思卡尔智能车电磁组 程序

#include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ #include #include #pragma LINK_INFO DERIVATIVE "MC9S12XS128" #define border 15 //电感采集信号的边界值 #define border_back 160 //背后两个电感的边界值 float caiji_ad[9];//存储七路AD采集量,caiji_ad[0] caiji_ad[8]恒等于零 int a,b,c; unsigned char table[16]={0x3F,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5 e,0x79,0x71}; int angle_data,angle_pre; //舵机角度 unsigned int caiji_flag; //采集标志 char out; char flag_pulse; char outjudge_flag; int check_stop; int upp; unsigned char cha; unsigned int position_flag; float position_q=0,position_qp=0,position_qd=0; float position_h=0,position_hp=0,position_hd=0; float position_jian; float position_jia; float position; float position_cha,position_zhong; float pwm1_p; float pwm1_diff; unsigned int jishi_flag; float diff_q,diff_h; float Speed_tar,Speed_cur,speed_p; float pwmtemp,pre_pwmtemp; float PID_P=200; float PID_I=300; float PID_D=0.1; float error=0; float error_min=-0.1; float last_error=0; float pre_error=0; float banjing ; void data_init() { unsigned int i; for(i=1;i<7;i++) { caiji_ad[i]=0; } position_flag=0; angle_data=2600;

1飞思卡尔8位单片机MC9S08JM60开发板实践教程-60页word资料

第一章搭建实验环境 1、实验电路板及下载器实物图片 2、实验电路图 本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍) 图1-3 实验资源部分电路 图1-4 LCD串口1602液晶电路 图1-5

RS232接口电路 图1-6 数码管显示电路 图1-7 发光管、ad转换以及按键电路 图1-8 3、集成开发软件环境的建立 1〉运行文件CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及简化32位)单片机集成开发环境codewa rrior6.3版本 2〉运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个 目录下

a>C:\Program Files\pgo\USBDM 4.7.0\FlashImages\JMxx 下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件; b>C:\Program Files\pgo\USBDM 4.7.0\USBDM_Drivers\Drivers下有下载器的usb驱动.因 此在插入usb下载器,电脑提示发现新的usb硬件的时候, 选择手动指定驱动安装位置到以上目录即可。 3〉运行USBDM_4_7_0i_Win之后,还会在目录: C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior集成开发环境下对usb下载器的调试、下载的支持。 4、C语言编程基础 第二章 LED闪烁程序编写过程 1、新建工程 运行单片机集成开发环境codewarrior IDE 出现如下界面 ●Create New Project :创建一个新项目工程 ●Load Example Project :加载一个示例工程 ●Load Previous Project :加载以前创建过的工程 ●Run Getting started Tutorial:运行CodeWarrior软件帮 助文档 ●Start Using CodeWarrior:立刻使用CodeWarrior

飞思卡尔单片机编程 之天职师大

天职师大期末必考 关于Codewarrior 中的 .prm 文件 网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。有什么错误请指正。 来源:(https://www.360docs.net/doc/737454047.html,/s/blog_60281b700100gbp6.html) - 关于Codewarrior 中的 .prm 文件_LiangXiangTai_新浪博客 正文: 关于Codewarrior 中的.prm 文件 要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。 通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。一个标准的基于XS128的.prm文件起始内容如下: .prm文件范例:

NAMES END SEGMENTS RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF; ROM_4000 = READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF; ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF; //OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF; EEPROM_00 = READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000BFF; EEPROM_01 = READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010BFF;

相关文档
最新文档