集成智能小车(二...4)整体设计之定-MCU及资源分配

在MCU的选型上,在一开始我就比较倾向于自己熟悉的STM32系列。从成本和加工工艺角度考虑,BGA封装的MCU是第一时间排除掉的,QFP封装的是首选。

如何选择MCU呢?对这辆小车来说,我觉得只要满足下面几个条件即可:

1)定时器资源足够,并且支持PWM、输入捕获功能

2)IO引脚足够

3)IO需要兼容3.3V和5 V

4)RAM和ROM够用

 

上一节已经列出了大致需要的IO资源,定时器资源数量需求如下:

序号

工作方式

功能模块

定时器数量

TIMER作用

备注

1

SYSTICK

系统时钟

1

系统1ms定时器,供延时处理和OS tick使用

独立定时器

2

ADC

避障、循迹、光敏、电压检测

1

定时触发采样

可复用

3

TIM-PWM

电机驱动

2

PWM输出

独立定时器

4

TIM-CAP

码盘测速

4

接收捕获

可复用

5

USART

WIFI/预留串口

2

接收超时

独立定时器,后来用IDLE检测方式,节省定时器做预留它用

6

TIM-CNT

超声波

1

超声波行程时间计算

可复用

7

PWM

舵机

1~2

20msPWM输出

独立定时器

8

红外发射

红外周期发射

1

 预留给车身指示用

可复用

从表中可以看出,需要独立的定时器有系统时钟、电驱PWM(8通道)、舵机(最少2通道,尽量预留更多通道)、其他TIMER可以复用或者独立使用。很明显,STM32全系列的都能找到,有些同学喜欢用freescale(NXP)的,也很容易找到能满足的MCU。

 

接下来去翻datesheet或者官方的选型表,找几种型号对别下资源找下RAM和ROM是否够用。ROM根据经验,一般不会超过100K,考虑到BOOT+IAP,256K的够用了,RAM越大越好,因为如果用OS的话,OS自身还要占用部分RAM。

 

https://www.st.com/content/ccc/fragment/product_related/class_information/class_level_diagram/group0/c7/8f/0b/3c/5f/f0/43/04/stm32_cl1734/files/stm32_cl1734.png/_jcr_content/translations/en.stm32_cl1734.png

(图片来自ST官网)

对熟悉和用过某个系列芯片的同学来讲上述这张图大致能敲定某个系列的,比如我选的是STM32F1系列的,主频为72MHz,RAM和ROM、定时器和IO数量这些资源信息在datasheet中会详细列出。而且Mainstream和High performance系列的MCU之间有些是可以做简单的兼容设计就可以做到pin-to-pin兼容,可以提前做好兼容设计。

 

更详细的选型可以在官网上看到更详细的MCU规格信息,如下图

(图片来自ST官网)

我根据经验直接在STM32F1系列中进行选择了,72MHz主频估计应该够用,该系列资源情况如下表所示:

         (图片来自st芯片datasheet)

到这里,我基本上已经倾向与选STM32F103Rx了,但是上一节我们统计过需要58个IO,多了7个怎么办呢,那就减少扩展功能呗,预留太多也是一种负担:)

 

最终我分配好的定时器资源如下:

TIMER

主功能

复用功能

SYSTICK

1ms TICK时间

 

TIMER1

电机-后驱

 

TIMER2

ADC 采样触发(TIM2_CH2)

 

TIMER3

TIM3_CH2:红外周期发射

TIM3_CH1:舵机
TIM3_CH2:舵机

TIMER4

TIM4_CH1:左编码器
TIM4_CH2: 右编码器
TIM4_CH3:舵机#2
TIM4_CH4:舵机#1

TIM4_CH1:舵机
TIM4_CH2: 舵机
TIM4_CH3:红外头接收

TIMER5

超声波时间计算

 

TIMER6

空闲

 

TIMER8

电机-前驱

 

 

 

分配好的IO引脚如下(引脚定义就不写中文了,英文应该容易看得懂):

引脚编号

引脚名称

PIN脚定义

2

PC13

CPU_LED_RED

3

PC14

CPU_LED_GREEN

4

PC15

CPU_LED_BLUE

7

NRST

复位输入

8

PC0

ADC_INF_OBS_MIDDLE_FRONT

9

PC1

CPU_SPI2_CS1

10

PC2

ADC_INF_OBS_LEFT_FRONT

11

PC3

ADC_INF_OBS_RIGHT_FRONT

14

PA0

ADC_LIGHT_FRONT

15

PA1

ADC_INF_OBS_RIGHT_REAR

16

PA2

CPU_MODEM_USART_TX

17

PA3

CPU_MODEM_USART_RX

20

PA4

ADC_PWR_SUPPLY

21

PA5

ADC_INF_OBS_LEFT_REAR

22

PA6

ADC_INF_OBS_MIDDLE_REAR

23

PA7

CPU_INF_FOLLOW_TX_TIM1_CH1N

24

PC4

ADC_TRC_INF_MF

25

PC5

ADC_TRC_INF_RF

26

PB0

ADC_TRC_INF_LF

27

PB1

CPU_ULTRASONIC_ECHO_F

28

PB2/BOOT1

CPU_ULTRASONIC_TRIG_F

29

PB10

CPU_I2C2_SCL

30

PB11

CPU_I2C2_SDA

33

PB12

CPU_SPI2_CS0

34

PB13

CPU_SPI2_SCK

35

PB14

CPU_SPI2_MISO

36

PB15

CPU_SPI2_MOSI

37

PC6

CPU_MOTO_LEFTA

38

PC7

CPU_MOTO_LEFTB

39

PC8

CPU_MOTO_RIGHTA

40

PC9

CPU_MOTO_RIGHTB

41

PA8

CPU_BACK_MOTO_LEFTA

42

PA9

CPU_BACK_MOTO_RIGHTA

43

PA10

CPU_BACK_MOTO_RIGHTB

44

PA11

CPU_BACK_MOTO_LEFTB

45

PA12

CPU_ESP-07_NRST

50

JTDI

CPU_SPI1_CS0

51

PC10

CPU_LED_LF

52

PC11

CPU_LED_RF

53

PC12

CPU_LED_LR

54

PD2

CPU_LED_RR

55

JTDO

CPU_SPI1_SCK

56

NJTRST

CPU_SPI1_MISO

57

PB5

CPU_SPI1_MOSI

58

PB6

CPU_ENCODER_CH1_TIM4_CH1

59

PB7

CPU_ENCODER_CH2_TIM4_CH

61

PB8

ADC_INF_RECEIVER

62

PB9

CPU_SERVO1_PWM_TIM4_CH4

 

到此,集成小车的功能、方案和选型就全部敲定了。

接下来就可以动手画原理图、PCB和coding了。

后续章节把一些有分享价值的写出来供大家参考,硬件和软件会结合在一起分享。

另外,下周没那么多时间写博客,代码写得有些乱,直接放出来怕大家拍我砖,让我整理下。我会尽快把集成小车的内容分享完,顺便把资料放在大家都能访问到的地方(暂定github,最近访问有点慢)。

有问题请大家在讨论区留言,有空就会作答。

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值