1.整体视图如下:
图一
图二
图三
2.各个部分介绍:
2.1 MCU及外围电路
MCU部分采用WCH的CH32V307RCT6作为主控芯片,其主频为144Mhz且APB1和APB2总线均可达到144Mhz,其具有单精度的FPU,可以快速进行浮点数的运算,是一款RISCV单片机。其具有WCH独创的RV的两线SWD调试接口,可以很方便的进行在线调试,同时搭配WCH的ISP工具,具有非常方便的USB下载功能。CH32V系列单片机会将全部的可执行的flash内容1:1复制到片内隐藏的SRAM当中运行,因此可以实现0等待的代码执行。事实上CH32V307有总共320KB的SRAM和488KB的flash,在实际使用中,可以分配为SRAM+FLASH分别为128K-192K,96K-224K,64K-256K,32K-288K,具体设置需要在.ld文件中修改并且使用配置软件配置(也可以在代码中设置,不推荐),.ld文件和配置不一样代码无法运行。该芯片的中断可以使用硬件压栈,当使用硬件压栈时应当保证抢占优先级不多于三个(其实完全够用),不使用硬件压栈需对代码进行修改。
该主控板集成了下载器功能(WCH-LINK),可以在只有一根USB线的情况下对主控板进行串口通讯还调试等功能,WCH-LINK由CH549G制作,支持对ARM和CH系列的RV单片机进行调试,因此,需要对该板子上的CH549G下载固件并切换到RISCV模式。之后就可以使用板载下载器进行调试,CH549G价格仅2元,非常的划算。
2.2 电源部分介绍
该主控板支持12-28v供电,也支持5v直接供电,12-28v转5v,5v再转到3.3v,可以看图三的上半部分,12-28v转5v部分使用的是MD8941转压芯片,配合了TVS瞬态抑制二极管消除尖峰电压,用了电阻来限制尖峰电流,同时还有肖特基二极管来防止反接,可以保证5v电压的安全,5v转3.3v部分则使用了2个SPX1117,一个用来给数字电路部分供电,另外一个用来给模拟电路部分供电,VSS和VSSA之间使用0R电阻连接,VDD和VDDA之间使用贴片电感进行连接,使用SPX1117是因为该款1117使用时可以在3.3v端使用低ESR的陶瓷电容,而不是必须使用ESR相对较大的钽电容或者电解电容。实测输出的3.3v电压精度很高而且非常的稳定,可以满足使用要求。
2.3 外设介绍
2.3.1 带隔离的CAN通讯
CAN通讯是工业和该比赛中常用的通讯方式,该外设设计采用了隔离电源和ADUM1201系列隔离芯片,来防止由CAN网络中的电压尖峰引起的芯片损坏和导致的失控。CAN的电平转换芯片使用的是NXP的TJA1042T,可以达到5M的通讯速率并且支持FDCAN,虽然CH32不支持FDCAN,但是换其他芯片就有支持的可能。该主控板带了两个CAN,都可以实现1M的通讯速率。
2.3.2 AB相编码器接口
该主控板集成了两个AB相编码器接口,可以通过配置将32的定时器配置为编码器模式,之后就可以使用AB相编码器记录电机转动的速度和转过的角度,也可以配合底盘两个正交的编码器,然后结合陀螺仪的数据,从而大概的确定底盘的位置变化。
2.3.3 双路10V ADC采样
板子上的ADC输入接口输入过后经过三个1k 0.1%的电阻分压得到单片机可以测量的电压,之后该电压通过轨到轨的运放GS8552构成的电压跟随器输出到单片机的ADC引脚,从而可以获得电压数据。CH32片内有2个12位的ADC,并且有1.2V的内部基准电压源,adc读到的电压加上校准的电压之后很接近真实值,误差和摆动基本上在0.01v左右。
2.3.4 NRF无线通讯模块
板子上可以直插一个NRF无线通讯模块,拥有最高2Mbps的无线通讯速率。实际上,NRF模块在不同阶段的SPI速率上限不同,因此代码中SPI1分别有9Mhz和2.25Mhz的速度切换。该模块具有6个接受地址和一个发送地址,接收的地址0可以设置成一个40位的地址,接受的地址1-5的前32位是相同的,由地址1决定(可以自己设置),后8位可以设置成不同的地址。对于发送地址来说,发送的包中则包含了发送地址,对方有一个接受地址和这个发送地址相同就可以接收到,如果启用了自动应答,那么发送方如果接收地址0和发送地址相同就可以收到自动应答ACK。
2.3.5 IPS显示屏模块
板载了一块IPS显示屏模块(图2右上方位置),使用的是中景园电子的0.96寸ips模块,使用的是ST7735驱动芯片,代码中配置的SPI通讯速率为36Mhz,不使用DMA显示时还是很占用CPU的执行时间的(虽然使用DMA也占用总线),但基本可以保证显示的帧率,某宝有该屏幕的示例代码,本例程中优化掉了其SPI发送过程中的延时函数。但是在显示字符的过程中还是很占用CPU时间,有兴趣的同学可以按照网上的教程先将显示字符的内容放到一块显存当中,然后通过DMA方式发送,就不会占用CPU时间了,常用的做法是用定时器定时的去spi+dma发送显示内容,就可以做到稳定的帧率和不影响其他外设使用。(中景园的字符函数不能显示负数,可以自己去修改)
2.3.6 两路SPI接口(可接SPI编码器)
引出了2个SPI编码器接口,分别为SPI2和SPI3,由于屏幕也使用的SPI2,所以不能同时使用(当然你也可以用CS引脚片选),两个接口非常适合用来接AS5047P等绝对式SCSI编码器。
2.3.7 两路MAX232接口
单片机的串口7和串口8接到了232芯片上来转换成232电平的串口,可以接232接口的传感器。(如果一直收到00请自行添加上拉电阻)
2.3.8 串口3直接引出
串口3使用GH1.25接口直接引出,可以直接接需要的设备。
2.3.9 其他
引出了部分IO(PCB上排针那里PC8标成PC18了,自行修改)
图四(屏幕太亮外加拍照技术太菜。。。)
图五
图六(维特智能的JY61P,输出已经经过厂家滤波处理,有能力的可以自己买便宜的滤波处理)
示例代码使用WCH的Mounriver IDE打开