0%

0x00 电路原理图分析

img

1、电压采样

img  输入电压VM为外接DC12V供电,分压电阻为18k和1k,即AD采集到的电压值为x时,实际电压y=x*19。主控连接VBUS_S的IO为PA0配置为ADC0的CH0。(确定嘛?)

2、温度采样

img  输入电压为3.3V,分压电阻为10k热敏电阻和3.3k电阻。热敏电阻型号为NCP18XH103F03RB,查阅数据手册得知其B值为3380。其中B值计算公式如下:
$B = \frac{(T_2 \times T_1)}{(T_2 - T_1)} \times \ln\left(\frac{R_2}{R_1}\right)$
  其中$T_1$和$T_2$是两个不同的温度,$R_1$是温度$T_1$下的电阻值,$R_2$是温度$T_2$下的电阻值。主控连接M0_TEMP的IO为PB0配置为ADC1的CH2。(确定嘛?)

3、晶振电路

img  无源8M晶振,外壳接地,两个引脚分别接OSCIN和OSCOUT。

4、主控电路

img  主控芯片使用GD32C103TBU6,具体详情可以参考相应数据手册。需要注意的是3.3V电源过100nf滤波电容后接入,该接地的接地。NRST接100nf到地,BOOT0接10k电阻到地,设置从片上FLASH启动。

5、电流采样

img  主要元件电流感应放大器使用的是TP181A1,根据数据手册得知,其GAIN为50。输出电压$V_{OUT} = \left(I_{LOAD}\timesR{SHUNT}\right)GAIN + V_{REF}$其内部电路原理图如下图所示。img  可以看到FOC电路原理图中,REF是3.3V通过两个1k电阻分压取得,可知其值为1.65V。两个TP181A1的输出分别接在主控的PA1和PA2上,分别采集B、C两路的电流值(因为三相电机定子的线圈为星形连接,通过基尔霍夫电流定律可以算出A路的电流大小,所以只需要采集两路电流即可)。两个TP181A1的输入IN+和IN-则是通过10mΩ的电阻分压电机驱动电路的PGND输出得到。

6、5V-3.3V

img  利用线性稳压器5V转3.3V。输入输出端接滤波电容,EN可以直接接IN。

7、电机驱动

img  AT8313是三路半桥集成驱动芯片,很多问题不需要自己考虑,比如低电压小电流的控制信号和高电压大电流的驱动信号如何隔离,三相电机的驱动电路如何设计,器件参数如何匹配等。芯片的外部电路可以参考数据手册搭建。示例如下图所示。img  可以看出,先前的PGND输出为BLDC的电流输出端,根据数据手册描述,AT8313包含三路半H桥驱动器,半H桥的下管MOSFET的S端为各自独立管脚(PGND1、PGND2、PGND3),这样就可接3个独立的检流电阻。如果使用检流电阻,请保证此3管脚(PGND1、PGND2、PGND3)的电压不超过±500mV。电流采样电路中,检流电阻为10mΩ,考虑电机的额定电流到不了50A,基本可以保证PGND电压不会超过±500mV。AT8313的其他管脚描述如下图所示。imgimg  根据管脚描述,除了必要外围电路,控制部分将三个EN引脚拉高,使能半H桥,然后将三个IN引脚接主控芯片,主控芯片通过输出高低电位可以控制半H桥的逻辑输出。V3P3是AT8313的一个3.3V电压输出引脚,直接和NSLEEP和NRESET连接,保证芯片正常工作。OUT1、OUT2、OUT3三个引脚接BLDC的三相线。IN1、IN2、IN3分别接主控芯片的PA8、PA9、PA10。VM输入通过两个100nf和一个100uf的电容并联滤波后送入。

8、24V-5V

img  主要器件使用JW5026电源芯片,为DC-DC芯片。支持5V1A输出,数据手册指导外围电路如下所示。根据外围电路参数搭建即可。img

9、剩余原理图

  剩余部分都是接口和灯等简单电路,主要作用是引出引脚接口,供连接调试。没有什么难点。

0x01 代码分析

  草在结它的种子,风在摇它的叶子。我们站着,不说话,就十分美好。

食材

  • 鸡蛋
  • 葱花,蒸鱼豉油,香油

方法

  1. 蛋水总质量的0.5%的盐加入鸡蛋中,将鸡蛋打散,然后比例为鸡蛋1:1.5温开水(<50℃)倒入搅拌均匀,过筛后除去表面气泡,容器封保鲜膜
  2. 冷水冷锅放入蛋液,盖盖留缝,中大火上汽,上汽后调成小火,蒸15分钟或观察表面凝固即可出锅
  3. 出锅后撒上葱花,放适量蒸鱼豉油和香油即可

注意事项

  • 鲜虾蒸蛋:鲜虾处理干净后,切成虾肉粒,调制蛋液时加入虾肉即可
  • 肉末蒸蛋:取猪肉切肉末,加入蒜、姜、淀粉腌制10分钟,起锅放油,将腌好的肉末炒香,生抽、耗油、鸡精、糖调口。待鸡蛋出锅后,将炒好的肉末铺在鸡蛋上,撒上葱花,淋少许蒸鱼豉油和香油即可
  • 蒸出来的鸡蛋好看的重点在于:

      1、蛋水比要合理,蛋多了容易蒸老,水多了蛋不凝固

      2、温开水中溶氧量低,蒸制过程中不会有气泡溢出,就不会出现表面蜂窝

      3、鸡蛋要受热均匀,不能用铁等导热快的容器,最好用玻璃陶瓷等容器

      4、鸡蛋凝固温度在70℃~80℃,盖盖留缝以及上汽后换小火都是为了尽可能保证温度维持在80℃

      5、封保鲜膜或者扣碗是避免高温水蒸气直接接触表面蛋液,避免表面过熟

食材

  • 排骨1kg
  • 大料2个、桂皮1g、花椒1g、花雕酒200g(没有就用黄酒或料酒)
  • 淀粉30g、葱40g、姜20g、冰糖160g、米醋/香醋190g、糖色16g,盐6g

方法

  1. 排骨砍成小块后洗掉血水,放50g花雕酒抓匀去腥,表面有酒香味即可,然后表面拍一层淀粉
  2. 热锅凉油,油温七成热(油开始冒烟)下排骨,炸1-2分钟扒拉一下排骨,避免粘锅,炸至表面金黄干香
  3. 起锅放底油,加入葱、姜、大料、花椒、桂皮煸炒出香味,然后倒入排骨翻炒均匀,再倒入花雕酒150g,醋160g,冰糖,糖色,盐,倒入适量热水烧开,定味稍稍有酸甜味即可。盖盖小火焖10分钟
  4. 大火收汁至粘稠,需要的话可以用老抽补色,出锅前再烹30g醋,翻炒均匀即可出锅

注意事项

  • 醋最好分两次放,第一次慢慢挥发慢慢入味,吃着是柔和的酸,出锅的醋是增香的酸,这样酸味比较复合
  • 糖醋排骨一定要炸,煎出来的排骨不够干香,吸味也不是那么足
  • 加水后定味的时候酸甜口不能太足,足了水分收干了会过甜

0x00 前置知识

  1. 什么是PWM?
      答:PWM是脉冲宽度调制(Pulse Width Modulation)的缩写。PWM通过改变脉冲的宽度来控制输出信号的占空比,从而实现对模拟信号的控制。其本质就是占空比可调的方波。两个关键参数——__频率、占空比__。频率即1s内有多少个脉冲,占空比即每个脉冲内高电平的持续时间百分比。可以使用这种方式利用数字信号模拟出模拟信号。如下图所示。img

0x01、驱动结构

基本结构如下图所示:
img

0x02、驱动原理

基本原理

星型连接的三组线圈通过6个mos管控制通断,当不同mos管导通时,产生不同的磁场,利用磁场控制中间的永磁体转子转动。不同的通断控制一共有6种组合,如下图所示。img
原理上只需要打开两个mos管导通两个线圈即可产生磁场使转子旋转,但是这种控制方式提供的扭矩不够大,于是同时导通三个线圈,最终合成磁场方向如上图种的转子指向V1~V6。

进阶问题

  1. 如何能够让磁体转到任意位置,而不是V1~V6一共6个方向?
      答:假设磁体需要停留在V1和V2中间位置。考虑一种情况——导通对应MOS管使磁体先处于V1位置,此时调整磁场,使得合成磁场方向指向V2,此时转子会向V2方向旋转,待其旋转过中间位置后,再调整磁场指向V1,由于惯性,磁体会继续向V2方向减速旋转,减速至0后向V1方向开始加速旋转,再过中间位置后,再调整磁场指向V2……。根据前面的分析,理论上,磁体会在中间位置来回转动,但当磁场切换频率足够快时,便可以使磁体处于V1和V2的中间位置转速为0。故只需要在一定的时间周期内,保证两个磁场方向占比为50%时,便等效为一个指向中间的磁场。如下图所示。img
      同理,通过调整一个时间周期内两个方向磁场所占据的比例,就可以合成出新的方向的固定磁场,如下图所示。img
  2. MOS管只能控制通断,线圈内电流大小固定,如何控制磁场强度?
      答:线圈中产生磁场的前提是线圈中有电流流过,当只有上面或下面三个MOS管导通时,无电流,此时不产生磁场,规定其状态为V7。如下图所示。img
      根据前面的分析,一定时间周期内不同方向磁场的占比可以改变最终合成磁场的方向,同理,当一定时间周期内磁场持续时间占比为0%时,磁场强度为0%,占比时间为100%时,磁场强度为100%。容易想到,在一定时间周期内加入V7状态,并等比例改变原有磁场持续时间,根据V7时间占比不同,可以获得不同的磁场强度。如下图所示。img

  “我”是谁?
  当我不再是孩子的父亲,不是父母的孩子,不是妻子的丈夫,不是老师的学生,不是中华人民共和国的公民,不是这世界上的一个生命体,不是宇宙中元素有序构成的一个生命体的时候;
  当天空只是天空,河流只是河流,高山只是高山,微风只是微风,地球只是地球,世界只是世界的时候;
  我是谁?
  乔文达,是朋友,是影子,他爱着悉达多的精神,爱着他的思想,爱着他的不与世俗为伍;在一起经历过成为沙门后,在苦苦修行后,在终于看到了乔达摩思想的思想的一隅后,最终在他选择皈依佛陀的那一刻,影子离开了光。我拥有影子吗?我甚至不知道自己能否拥有影子。不,答案一定是没有。没有人真的能够爱到精神层面,即使有,也终会被夺走,而夺走他的,甚至不需要乔达摩的智慧,再说我也本没有悉达多的思想。甚至在我开始思考有关乔文达的那一刻,我就注定了无法找到“我”。
  悉达多不能在乎乔文达,如果在离开之前会有不舍,悉达多无法看到“我”,他是乔文达的朋友,是乔文达在乎的人,是乔文达爱的人。如此以来,我不再是“我”。当“我”中不只有“我”,我便不是纯粹的“我”。
  “悉达多纹丝未动,彻骨的冰冷瞬间袭击他的心脏。他感到这颗心脏像一只小动物,一只鸟或一只兔子般在胸中颤抖。他如此孤独。多年来,他并未像现在这样意识到自己无家可归。从前,即便在最深的禅定中,他仍是父亲的儿子,高贵的婆罗门,一个修行之人。如今,他只是苏醒的悉达多,再不是别的什么人。他深吸口气,打了个寒颤。没人像他这般孤独。贵族属于贵族,手艺人属于手艺人,他们说同样的话,容身一处,分享生活。婆罗门要同婆罗门在一起。苦行者要在沙门中立足。即便归隐山林的隐士也不是独自一人,他们也有同道人,有归属。乔文达已经皈依佛门,万千僧侣是他的弟兄,他们有着同样的僧服,信共同的信仰,说相同的话。可是他,悉达多,他属于哪里?和谁分享生活?说谁的话?”

  • switch-case语句:
    switch(a){
      case 1: xxxxxxx; break;
      case 2: xxxxxxx; break;
      case 3: xxxxxxx; break;
      default: xxxxxxx;
    }

      每个case后面的break不要漏,否则case判断成功后,执行后续语句之后会继续向下执行。假设a=2,如果没有break语句,在case 2后续代码执行完毕后,会继续执行case 3的代码。同时最好写上default,保证逻辑完整,debug时更容易找到问题。

目标


利用STM32F103C8T6构建一个简单的控制平台,按键控制电源通断、LED指示灯用于简单调试、OLED屏幕用于打印相关信息方便后续调试


器件清单

  • 控制器:STM32F103C8T6
  • 屏幕:OLED屏
  • 晶振:8M外置晶振
  • 电池:7.4V锂电池
  • 降压芯片:ASM1117-5.0和ASM1117-3.3
  • 电源开关:5.8mm*5.8m 6P自锁开关
  • LED、电容、电阻、插针若干(LED、电容、电阻均选取0603封装,是个失误,太小了,不便于手动焊接,建议0805封装)

    封装 尺寸 功率 电阻耐压值
    0402 1.0mm*0.5mm 1/16W 50
    0603 1.6mm*0.8mm 1/10W 50
    0805 2.0mm*1.2mm 1/8W 150
    1206 3.2mm*1.6mm 1/4W 200
    1210 3.2mm*2.5mm 1/3W 200
    1812 4.5mm*3.2mm 1/2W 200

电路模块


1、供电管理

  • 2P插座接7.4V锂电池,通过ASM1117-5.0和ASM1117-3.3分别稳压到5.0V和3.3V。两个稳压模块输入前连接自锁开关,输出接LED串联4.7k电阻,显示是否正常输出
  • 核心供电和OLED屏供电:3.3V
  • 外设供电:5V/3.3V。安装3P插针,用跳线帽进行电源切换

2、时钟输入

  • 8M晶振,并联2个20pf电容

3、复位电路及BOOT设置

  • 暂时没有手动复位需求,直接使用10k电阻上拉3.3V输入,接到NRST上,同时电阻到地串联10nf电容滤波
  • 使用主闪存存储器,直接将BOOT0引脚过10K电阻接地即可

4、调试接口

  • 一个4P插针,用于外接STLINK

5、OLED屏

  • I2C通信,除VCC和GND外,SCL和SDA分别接PB6和PB7
  • 输入前串联自锁开关,控制供电。
  • 电源输入并联LED和4.7K电阻,用于显示是否供电

6、简易LED调试

  • 8个LED串联1K电阻上拉3.3V输入
  • LED分别连接PA8~PA12,PB13~PB15

7、外设调试接口

  • 使用两个3*12P的插针,最上面为信号线,重点为GND,最下面为VCC
  • PB6~PB9,PA8~PA12,PB13~PB15作为一组引出
  • PB10~PB11,PB1~PB0,PA7~PA0作为一组引出

8、供电切换

  • 为了满足可能的外设供电需求,利用3P插针,可通过将跳线帽插在不同的位置切换外设供电电压。(电路连接为:5.0V/VCC/3.3V)

必要记录:

  • 在STM32F10XXX里,可以通过BOOT[1:0]引脚选择三种不同的启动模式,启动方式如下表所示:

    启动模式选择引脚 启动模式 说明
    BOOT1 BOOT0
    X 0 主闪存存储器 主闪存存储器被选为启动区域
    0 1 系统存储器 系统存储器被选为启动区域
    1 1 内置SRAM 内置SRAM被选为启动区域
  • 晶振要尽可能离MCU近,尽可能避免干扰

  • MCU供电一般要在每对电源输入引脚加两个滤波电容,用于去耦,两滤波电容容值分别为10nf和100nf

  • 应该安装几个轻触开关,用于外部输入,不然无法手动给条件进行软件测试

  • 供电和地线可以在PCB画图时设置为30mil,保证在可能的大负载下供电稳定

  • PCB画板时,如果没有包装,电路板记得四周倒角。记得打孔预留固定孔位,方便后续组装

  • 在选用MOS管搭建防反接电路时,一定要确认PMOS和NMOS的DSG三极是否正确

  • 选用自锁开关作为电路电源输入管理时,一定要提前测清楚要用的开关的引脚是如何连接的,然后再设计对应的电路图

  披着浓厚的夜色出发,被黑夜紧紧的包裹,微弱灯光照亮扬起尘土的公路,被“王者”反复碾压,像是喘不上气;身后远离的人儿,有的在峡谷中的战斗欢声笑语;有的在空调吹拂下躺在床上刷着手机;有的互相拥抱耳边呢喃……想想朋友圈,有的韩服上了王者;有的在青春的年纪,已经去过绝大多数人一辈子都不曾到达的地方;有的欣赏身边的美景,体会着经常被人忽视的温柔细腻……
​  前方叔叔的尾灯已经若隐若现,我这细胳膊细腿缺失的力量,化作实实在在的尺,丈量着我与叔叔之间的差距。身旁不时有“王者”呼啸而过,带起的灰尘时而混合着青草的芬芳,时而混进来一丝牛粪的“芳香”,一股脑涌入肺中,强调着我远离市区的这个事实。叔叔轻松将我“拉爆”,但是我却没有一丝的焦急,这种安心是多么的宝贵,因为我知道,无论相隔多远,他终将在某个地方等待着我,与我一起休息。这种安心就像从爸爸嘴里听到“你尽力就好,实在不行回来我和你妈还是能让你吃饱饭的。”这种婴儿与母亲脐带一般的纽带,牢牢将我的心拴在这个实实在在的世界里,不飘向无边无际的虚空。每个人终究只能困在自己的躯壳中,看着瞳孔透出那一丝丝的光,听着鼓膜震动传来的一点声音,在地球oline里,只能感受自己这一个主角与茫茫npc有限的一点交流。
  大腿持续涌上的酸软,一直引诱着我停下,看着旁边风驰电掣的电动车,只需要拧一拧油门就能爬上令我累到绝望的缓坡,那种发自心底里渴望是那么的明确。全程48公里,一个全马差不多,如果我实打实跑一次,会对我现在骑着的自行车该有多么渴望啊。是啊,那我骑上了电动车是不是又要开始羡慕汽车了,坐上汽车又会感叹火车有多么快,在火车上看着山区弯弯绕绕就会期望飞起来直达。这种渴望是没有上限的,我会永远渴望更快,更远的。但是倘若地球不是圆的,到我终于疲于这种追求快和远的时候,那些一开始就领先我的人,他们丢下我多远了呢,而那些比我跑得慢的,又被我丢在了哪里?我的身边,可触及的又是谁呢?
​  昨晚今晚一来一回,伴随着腿上真实可感的酸痛还有屁股的胀痛,靠着半夜容易袭来的多愁善感,编辑一些真实从我脑中闪过的想法,当然,也可以任其逝去,不过既然肉体的逝去已经是必然,那么这些消耗了能量产生的意识,便多了一份保留的理由。

渔翁

唐·柳宗元

渔翁夜傍西岩宿,晓汲清湘燃楚竹。

烟销日出不见人,欸乃一声山水绿。

回看天际下中流,岩上无心云相逐。




  也许是个温暖的夜晚,一位渔翁来到西岩旁边,依傍着陡峭的山壁,在一个可以栖身的山洞中安顿下来。待破晓将至,一缕金黄的阳光为新的一天带来了第一份温暖。渔翁起身取来清澈的湘江江水,以楚国的竹子为柴,做起了早饭。待做饭的烟火散去,太阳也升了起来,一眼望去,却不见渔翁。只听摇橹欸乃声,其所到之处,山更青了,水更绿了。回头一看,在那水天相接之处,渔翁正摇着橹,被太阳的光辉包裹着,向远处而去。而西岩之上,只有无心白云相互追逐。


  人生的不愉快,大多是来自于他人。功名、权力、金钱,这些让人苦苦追寻的所谓的“成功”的标志,如果没有其他的人,它们将毫无意义。更进一步,这种他人能够带来的愉悦或者说“成功感”,说到底来源于比较——我比他有钱,所以我比他成功;我比他权力大,所以我比他成功;我比他出名,所以我比他成功……。如果人生没有属于自己一个人的一种明确的目标与追求,好像是无法爬出这种追求“成功”的漩涡的,只会在无穷无尽的比较中,被这洪流拖入无尽的深渊。