マイコンの基礎固め5

前回までの記事でメモリの割り振りを決めてリンカスクリプトも作成したので、今回はマイコンが起動した後の処理について記述していく。 STM32CubeIDEで空のプロジェクトを作成すると「Startup」というフォルダの下に「startup_stm32f767zitx.s」などという名前でマイコンが起動した直後の処理を記述したアセンブラファイルが作成される。 内容を見てみたところ、ここで行われているの […]

マイコンの基礎固め4

前回(マイコン基礎固め3)の記事で決定した出力セクションの構築するためにリンカスクリプトを作成したので紹介する。STM32CubeIDEで空のプロジェクトを作ると自動的に作成されるリンカスクリプトをベースにしている。 まずメモリ領域だが、ITCM領域を新たに定義し、さらにRAMとして一括りに定されていたDTCM、SRAM1、SRAM2を分離して定義した。 あとは前回の記事(マイコン基礎固め3)で決 […]

マイコンの基礎固め3

STM32F7マイコンの性能を引き出すために出力セクションをどこに配置するか自分なりに考えた結果をここにまとめておく。 STM32F7のメモリ STM32F7マイコンには5つのメモリがある。FLASH、ITCM、DTCM、SRAM1、SRAM2だ。このうちFLASHがROMに相当し、それ以外はRAMになる。 上の画像においてFLASHメモリの配置場所が0x00200000から始まるものと0x080 […]

マイコンの基礎固め2

今まではSTM32CubeIDEで自動的に生成されるリンカスクリプトにプログラムのメモリへの配置を任せていたが、ここをしっかりやらないとマイコンの性能を引き出せないことが分かった。 そうするとマイコン内に存在するメモリやバスの種類について詳しく知る必要が出てきた。リファレンスマニュアルの2章「System and memory overview」を見ると文書の中の表記と図の表記が微妙に異なっていて […]

マイコンの基礎固め

STM32F7をいじっていて、最適化をかけたりARTを有効にしたりキャッシュを有効にしたりするとプログラムが不安定になることが多々あった。詳しい原因が良く分からないまま全部無効にしたりして場当たり的な対応をしてきたが、結局これでは高額なマイコンの性能を全く生かせないのでじっくり腰を据えて取り組むことにした。 マイコンのメモリにどうプログラムが配置されるのか調べるところから始まって、リンカとは何か、 […]

ガスコンロ+フライパンリフロー

発注していた基板が届いたので部品の実装をした。ホットプレートを持っていないのでガスコンロとフライパンでできないか挑戦してみた。ネット上にほとんど情報が無かったのでうまく行くか不安だったが、無事にリフローできた。JLCPCBから届いた基板の品質は思ったよりかなり良く、10枚で12000円ほどだったのだがこの値段でこの品質なら文句なしだ。 以下に基板の品質とガスコンロ+フライパンでリフローをする手順を […]

KiCadの基本的な使い方

久しぶりにKiCadを使ったために操作を忘れていたりして色々と調べなおした。詳しい説明は省くとして、回路の設計から発注用データの出力までの流れをここに書いておく。 1. 回路図の作成 「回路図レイアウトエディター」を使って回路図を書いていく。基本的にすべての回路図記号(シンボル)は用意されているが、もし無い場合は「シンボルエディター」を使って作成する。 2. 回路図記号と実際の部品の関連付け回路図 […]

3DプリンターのPETGフィラメント詰まりが改善

しばらく3Dプリンターから離れていたが、 エクストルーダーをBMG Extruderというものに変えてみたところPETGフィラメントの詰まりが大分改善された。 結局のところ柔らかいフィラメントの詰まりをなくすためには、フィラメントを弱い力で押さえつけつつ強い力で押し出すことができればいいわけで、そんなエクストルーダーがないか探してみたところ、デュアルドライブエクストルーダーが良いらしいということが […]

d,q軸電圧に現れるリプルの原因

以前からd,q軸電流一定でモータを回した際にd,q軸電圧に電気角1周期あたり6回のリプルが発生していることが分かっていたが、原因がわからなかった。 色々調べた結果どうやらデッドタイム補償を実装していなかったことが原因のようだ。 d,q軸電圧を一定にした状態でモータを回してもd,q軸電流が一定にならなかったため色々と調べていたらこの結論にたどり着いた。 今まではそんなに高精度な制御はしないし、現状で […]

今まで使っていたPID制御に問題

5,6年前に作ったPID制御のプログラムで、飽和処理に問題が見つかった。今まで使っていた計算式は以下の通りである。 制御量 = 前回制御量 +P × (今回誤差 – 前回誤差) + I × 今回誤差 + D × (今回誤差 – 2 × 前回誤差 + 前前回誤差) 制御量が飽和した際には強制的に最大、あるいは最小制御量にクリップしていたのだが、この計算式でそれをやると制御が破綻ししてしまうことに今頃 […]