tag 标签: 单片机

相关帖子
相关博文
  • 热度 5
    2020-11-15 21:18
    645 次阅读|
    2 个评论
    【原创】基于单片机的智能小车之步进电机28BYJ-48的转动_01
    最近想做一个步进电机转动,看着挺简单,也就5根线连接,结果栽在了线序上 先简单讲讲编程所需要的相关必要知识,再说驱动步进电机的程序 一:先来认识 步进电机28BYJ-48 28BYJ-48:全称为:4项8拍-28mm最大有效外径-永磁减速步进电机 28:有效的最大外径28mm B:步进电机 Y:永磁 J:减速电机 4:4项 8:8拍 二:步进电机编程的必要知识 A:步进电机的3个关键参数:步进角+减速比+空载启动频率 01)步进角 4项8拍时,步进角5.625°(旋转360°,需要转动8个循环,每1个循环为1个4项8拍 64=8循环*8拍) 4项4拍时,步进角11.25°(旋转360°,需要转动8个循环,每1个循环为1个4项4拍 32=8循环*4拍) 本程序选择:每拍转动的角度5.625° 02:减速比 4项8拍时,步进角5.625°,如果减速比64,那么步进角=5.625°/64 4项4拍时,步进角11.25°,如果减速比64,那么步进角=11.25°/64 结论:减速比越高,精度越高,但是转速越慢(因为旋转每一拍的时间有限定,涉及到第三个参数:空载启动频率) 03:空载启动频率 空载启动频率最大为550Hz,也就是最小时间为1.8ms(T=1/f=1/550=1.8ms),本程序选定的是2ms/拍; 4项8拍,旋转360°需要的时间: cnt=360/(5.625/64)=4096拍 T=2ms*4096拍=8192ms=8.192s,时间还是挺长的。 其实,步进电机还有一个参数:带载能力。只是此处编程用不上,我也没有列到关键参数里,等接下来的42步进电机+TB6600驱动器,再重点讲述,在此处,已经够用。 B:引脚电平 上图里列出8拍的电平,每4项8拍为一次循环 四相八拍 A=0 0x0e 0x01(ULN2003) A=0;B=0; ... ... B=0; ... ... B=0;C=0; ... ... C=0; ... ... C=0;D=0; ... ... D=0; 0x07 0x08(ULN2003) D=0;A=0; 0x06 0x09(ULN2003) A=0; unsigned char code tab_motor ={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//ULN2003和步进电机直接相连 C:引脚 上午为了步进电机28BYJ-48引脚头痛很久,怎么弄都是光震动不转动, //版本1:我淘宝网购买,有白色接插件,限定线序 步进电机引脚: VCC:蓝色 A:粉色 P0^0 B:黄色 P0^1 C:橙色 P0^2 D:红色 P0^3 sbit motor_rotation_A=P0^0; sbit motor_rotation_B=P0^1; sbit motor_rotation_C=P0^2; sbit motor_rotation_D=P0^3; //版本2:网上讲解最多的线序 步进电机引脚: VCC:红色 A:橙色 P0^0 B:黄色 P0^1 C:粉色 P0^2 D:蓝色 P0^3 sbit motor_rotation_A=P0^0; sbit motor_rotation_B=P0^1; sbit motor_rotation_C=P0^2; sbit motor_rotation_D=P0^3; 三:编程思路 定时器T0定时中断,每2ms中断一次,中断里,数据变更一次输出到步进电机,循环输出或者4096次之后不再输出,两种方式都可以 /**************************************** 电路元器件:STC89s52+步进电机28BYJ-48+ULN2003驱动 ****************************************/ #include //cnt_duty unsigned char cnt_1ms=0; //unsigned char code tab_motor ={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //4项8拍 //************************// //功能:初始化函数 //输入:无 //输出:无 //************************// void motor_rotation_Init(void) { P0=0x00; } //************************// //功能:初始化函数 //输入:无 //输出:无 //************************// void T0_init() { TMOD=0x01; TH0=0xF8; //2ms TL0=0xcc; ET0=1; EA=1; TR0=1; } //************************// //功能:主函数main() //输入:无 //输出:无 //************************// void main(void) { motor_rotation_Init(); T0_init(); while(1) { } } //************************// //功能:T0中断函数 //输入:无 //输出:无 //************************// void T0_intr(void) interrupt 1 using 1 { static unsigned char i=0; TH0=0xF8; //2ms TL0=0xcc; //版本04 //ok // if(cnt_1ms%2==0) //fuck! (%) and(/),I can't define it //if(cnt_1ms/2==0) // P0=tab_motor ; ++cnt_1ms; =8) i=0; } //再增添一些 我遇到的问题:电机只震动不转 我怀疑是数据和线序的问题,到底是橙色还是蓝色为第0脚,赋值问题; A1 : 将电机线成对的交换一下,相的导通顺序的不对,也可以改程序。 A2 : 原因: 1 ,步进电机的转速虽说和脉冲频率有关,但不是任何频率都行的。只能在某个特定的范围内调速才行; 2 ,脉冲频率太快,会丢步,即步进电机转子振荡很厉害。内部不动,外部在动,那是已经失步了,步进电机在一个位置振荡,根本没启动; 3 ,频率不对,也即是给两个脉冲中间的延时不对。 解决方法: 最好是用定时器给一个较精确的延时来调试,找出一个可以让它转的合适的延时。 A3: 首先要确认你外围接线是否正确。 再设定好步进的控制方式及细分,是双脉冲还是脉冲加方向控制。 最后再检测你的脉冲输出,脉冲频率先从低到高慢慢增加。 A4: 橙,黄,粉,蓝,就对应 A,B,C ,D ; 根据电路的设置,我们可以把电机每转动一个小角度的值给他算出来,分别是 :0xe,0xc,xd,0x9,0xb,0x3,0x7,0x6; //中文:坤豆豆 //英文:Cayden //时间:2020-11-15 //链接:https://blog.csdn.net/caozhaokun/article/details/109710113
  • 热度 1
    2020-11-9 13:04
    232 次阅读|
    0 个评论
    关键词:Modbus FreeModbus STM32F103C8T6 CubeMX 1.开发环境 (1)STM32CubeMX,版本:4.27.0,截止写稿时,最新版本已到6,但孔丙火(微信公众号:孔丙火)实在是用不习惯版本5以后的界面,所以还继续用4版本的。 图1 (2)MDK(Keil),版本:5.17,有部分朋友用的还是4版本的,建议升级到5,在5下装一个兼容包,就可以用5打开4版本的程序。 2.时钟及串口初始化 (1)新建CubeMX工程 孔丙火(微信公众号:孔丙火)认为,这一步比较简单,点击初始界面中的New Project,在后面出现的配置窗口中,按照图2搜索STM32F103C8,选择这个器件,然后点击Start Project就可以了。 图2 然后就到了图3的配置界面,红框部分跟图中配置一样即可。左侧红框选择后,右边红框的部分会自动出来。TIM2用来做RTU的3.5字符周期的定时,下一节孔丙火(微信公众号:孔丙火)会详细讲解。 图3 单片机、ARM、现场总线、PLC、嵌入式软硬件的设计经验分享,秉承“点点滴滴皆智慧”的理念,一起分享,共同交流。
  • 热度 5
    2020-10-23 14:45
    312 次阅读|
    0 个评论
    采购收藏必备 | 你了解单片机吗?
    关于单片机,你了解多少呢?让我们一起往下看吧! 作为电子元器件的采购,对于很多产品的了解只停留在表面。有时候还会出现定错产品的情况,造成乌龙事件。 但是,当采购想着下功夫去专研时,而那些电子元件知识又太枯燥晦涩了,让人读不下去。简短来说,就是每个字我都认识,但是放在一起我就不认识它们了,这说来十分让人头疼。 芯仔深知采购不易,为此做了这版简单易懂的漫画科普——单片机。芯仔希望尽量用简单的话,讲明白高深的词,把乏味的理论知识变得生动有趣。这也是芯广场一直在不断尝试,努力去做的事情。希望这篇推文,对你能够有所帮助。 深圳市中远亚电子有限公司 中远亚电子,在芯片行业深耕十年之久,用芯服务好每一位客户,至今已服务全国1500多家企业。通过源头缩短供应链,节约成本,组建最敏捷的元件供应系统。确切保障交付的时间,从样板起严格控制物料质量,致力成为电子元器件采购的好伙伴。 中远亚一切围绕以客户为核心的元件供应服务,真正做到不仅仅是卖芯片,而是致力为客户提供更有价值的服务。目前,已建立自己的检测实验室,已开发有累积上千个模拟检测平台。十年以来,建立属于自己独特的可执行的超严格检测流程。 助力中国制造,为中国制造保驾护航,是中远亚的使命。高要求的客户,成就了高质量标准的中远亚。为继续了解中远亚,请关注芯广场微信公众号,联系我们。 * *有采购芯片需求(样板可售),详情联系芯广场公众号。
  • 热度 3
    2020-9-23 11:12
    252 次阅读|
    0 个评论
    当 CPU 正在处理某件事情的时候,外部发生的某一事件请求 CPU 迅速去处理,于是, CPU 暂时中止当前的工作,转去处理所发生的时间。中断服务处理完该事件以后,再回到原来被中止的地方,继续原来的工作,这样的过程称为中断。
  • 热度 10
    2020-4-27 14:25
    877 次阅读|
    0 个评论
    单片机就是个小计算机,大计算机少不了的数据存储系统,单片机一样有,而且往往和CPU集成在一起,更加显得小巧灵活。 直到90年代初,国内容易得到的单片机就是8031:不带存储器的芯片,要想工作,还必须外加RAM和ROM,单片机成了3片机...... 现在不同了,大的小的又是51,又是AVR又是STC,还有什么430,PIC等等,都各说各的好,可是谁也不敢说“我不要存储器”。 单片机的数据存储手段 程序存储器ROM 程序存储器里面存放的是单片机的灵魂:工作程序。 小的可能只有1KB,最多只能装1024条8位数据,因为实际指令还有许多2字节,3字节指令,所以它还装不下1024条指令。大的也有128KB的。这些8位数据,要么在工厂里做模子光刻进去,要么一次性的烧写进去。 业余或开发,最多也就是用编程器这么一个特殊工具,把调试成功的机器码装载进去,或者像AVR单片机那样自己花几块钱做一条下载线,把电脑里这些东西灌进去(或许是AVR最吸引人之处)。 它一旦进驻电脑的程序存储器中,除了借助上述装置便不能自由改写,在单片机运行时,只是从其中读出指令或固定的数据,所以给程序存储器一个“只读存储器”的别名,简写为ROM,包括用编程器写紫外线擦除内容的EPROM、用电擦除的EEPROM和现在新兴的FLASH ROM。 一次性写入的ROM,仅用于电路和程序固定的批量产品中,实际工作起来,都是一样的。 为了定位ROM中的数据,每个8位存储单元都有一个固定的“地址”,通常用16进制数表示。例如,对于一个所谓4K的ROM,地址从0000H到0FFFH(即从0000,0001...4095),单片机运行时从哪个地址取数据,完全由程序本身决定,并不要我们干预。 记住,给单片机一通电,它经过一个短暂的复位过程,立即转向ROM的最低地址0000H,在这里面放置的往往是一条“跳转”指令,它从这里一步跳到另一个地址:程序的真正起始地址,例如51机的0080H。 ROM是程序存储器,除了指令外,还包括运行程序必须的某些固定数据,例如:数据表。假如,我们要求在单片机的接口上输出00H到FFH(255)按正弦半波变化的数值,每秒10000次。如果硬要它按照公式一个个计算,对于它来说未免力不从心。可是我们可以把预先计算好的数值存入ROM中,到时候直接取出不是好多了? 又如一个重要的应用:大家一定见过不少单片机的东西上面都有数码显示,那些个数字其实就是用单片机的口线控制数码管的字段电极电位。这些字形也是存放在ROM中的字模表,各个字模和0-9的数字(机器内当然是0000-0101二进制数)对应起来。常见的共阳极7段数码管,必须在阳极加正电,7个阴极都是地电位,才能显示数字"8",数字8对应的显示字码值是二进制数“10000000“(那个1对应的是小数点,高电位不让它显示)。 数据存储器RAM 这是个可以随时存取数据的一块存储器,也就是可以读(取)也可以写(存)的存储器,简称RAM。 现在的单片机里面使用的RAM,属于静态RAM或SRAM,这个和电脑用的内存条有所不同。只要你把数据写入SRAM后,不断电或者不清除掉,这个数据就一直保存在那里。电脑用的是动态RAM,要不断给它加刷新脉冲才能保存数据。 因为单片机处理的信息量比电脑小很多,所以它带的RAM也比较少:从完全不带、带128、256、...1K、2K,到4K,比ROM少多了。 因为实际上RAM只是作为数据临时存放的地方,除非进行图像处理需要存放大量的数据外。一般对于执行较简单任务的单片机,有这么多也够用,如果实在不够用也只能采取外加SRAM如6116、6264等等来扩展。 为了对RAM单元存取8位二进制数,当然也得和ROM一样用“地址”来标示它的具体位置。假如某单片机有1K(1024)RAM,它的地址也是从0000到1024,或16进制数的0000H到03FFH。可见,和ROM的地址是一样的。 会不会混淆不清? 不会,因为读ROM是由单片机的程序指针或转移指令或查表指令进行,而这些指令是不会进入RAM区的;读写RAM是另外的数据传送指令,也不会进入ROM区。这点也是和电脑不同之处,后者程序和数据都在内存条里面,地址不同,如果窜位了就会造成不可预见后果。单片机的这种存储器结构也称为哈佛结构。 RAM在单片机里的用途 RAM在单片机里的用途,主要是存放临时数据。 例如用单片机测温,每秒测1次,显示1分钟的平均值(1分钟更新一次): 我们先通过传感器、放大电路、A/D转换,把温度这个模拟量转变为成比例的二进制数,然后每秒钟1次把数字量通过输入口顺序存入到单片机的RAM中,然后对他们进行两两求和再平均的计算,最后的数值显示出来,然后把这60个存储单元统统写0清除旧数据,下次又是如此循环进行。 结语 另外在单片机里面还有若干寄存器,数量不多但是作用很大,除了暂存数据,还可以交换、加工、传递等等,以及随时记录单片机当前处于什么状态,输入输出口也是作为特殊功能的寄存器存在,具体各有不同,就不是随便说说可以搞清楚的,要看有关书籍了。 - END - 关于造物工场 造物工场立足金百泽超过20年柔性电子制造服务优势,聚焦产品方案和电子工程的设计服务,提供从创意到制造、PCB/PCBA/BOM/元器件等一站式硬件服务。
相关资源
广告