Electoday 4.0

ไมโครคอนโทรลเลอร์ => ARM Processors => Topic started by: tha on July 23, 2021, 07:40:16 am

Title: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 23, 2021, 07:40:16 am
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__PID.html

(https://i.imgur.com/35hCT5V.png)
(https://i.imgur.com/gg0ozKT.png)

Description

A Proportional Integral Derivative (PID) controller เป็น a generic feedback control loop mechanism ถูกใช้อย่างแพร่หลายใน industrial control systems. A PID controller เป็น the most commonly used type of feedback controller.

ชุดของ functions นี้จัดให้มีใช้ (PID) controllers สำหรับ Q15, Q31, และ floating-point data types. The functions ทำงานบน a single sample of data และแต่ละการเรียกไปยัง the function จะคืนกลับ a single processed value. S ชี้ไปยัง an instance ของ the PID control data structure. in เป็น the input sample value. The functions คืนกลับ the output value.
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 08:50:30 am
Algorithm:

   y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
   A0 = Kp + Ki + Kd
   A1 = (-Kp ) - (2 * Kd )
   A2 = Kd 

โดยที่ Kp คือ proportional constant, Ki คือ Integral constant และ Kd คือ Derivative constant

             (https://i.imgur.com/45O5UXr.png)

The PID controller คำนวณ an "error" value เป็นความแตกต่างระหว่าง the measured output และ the reference input. The controller พยายามทำให้ต่ำ the error โดยการปรับ the process control inputs. The proportional value กำหนด the reaction ต่อ the current error, the integral value กำหนด the reaction ขึ้นอยู่กับ the sum of recent errors, และ the derivative value กำหนด the reaction ตามอัตราที่ the error ที่กำลังเปลี่ยนอยู่.

ปล. ลองดูที่ไฟล์ก็ได้ มีอยู่นิดเดียว หรือดูที่นี่ก็ได้ เขาใช้ CMSIS DSP PID อยู่ ขอบคุณนะครับ ขอเผยแผ่สักหน่อย
      https://stm32f4-discovery.net/2014/11/project-03-stm32f4xx-pid-controller/ (https://stm32f4-discovery.net/2014/11/project-03-stm32f4xx-pid-controller/)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 09:57:38 am
Instance Structure

The Gains A0, A1, A2 และ state variables สำหรับ a PID controller ถูกเก็บเข้าด้วยกันใน an instance data structure. A separate instance structure ต้องถูกกำหนดสำหรับแต่ละ PID Controller. มี separate instance structure declarations สำหรับแต่ละ the 3 supported data types.

Reset Functions

มี an associated reset function อีกด้วยสำหรับแต่ละ data type ซึ่งจะเคลียร์ the state array.

Initialization Functions

มี an associated initialization function อีกด้วยสำหรับแต่ละ data type. The initialization function ดำเนินการการทำงานต่อไปนี้:
   •   เริ่มต้น the Gains A0, A1, A2 จาก Kp,Ki, Kd gains.
   •   เอาศูนย์ออกจากค่าใน the state buffer.

Instance structure ไม่สามารถถูกวางลงใน a const data section และขอแนะนำให้ใช้ the initialization function.

Fixed-Point Behavior

ต้องใช้ความระมัดระวังเมื่อใช้ the fixed-point versions of the PID Controller functions. โดยเฉพาะอย่างยิ่ง, the overflow and saturation behavior of the accumulator ที่ใช้ในแต่ละ function ต้องถูกพิจารณา. อ้างอิงถึง the function specific documentation ข้างล่างสำหรับแนวทางการใช้งาน.
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:01:37 pm
(https://i.imgur.com/xDUoQWa.png)

Returns

ส่งออก processed output sample.

References arm_pid_instance_f32::A0, arm_pid_instance_f32::A1, arm_pid_instance_f32::A2, and arm_pid_instance_f32::state.
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:07:50 pm
(https://i.imgur.com/VmZ6XdJ.png)

Description:

The resetStateFlag ระบุว่าจะเซ็ต state เป็นศูนย์หรือไม่.
The function คำนวณ the structure fields: A0, A1 A2 โดยใช้ the proportional gain( Kp), integral gain( Ki) และ derivative gain( Kd) เซ็ต the state variables เป็นศูนย์ทั้งหมดอีกด้วย.

References arm_pid_instance_f32::A0, arm_pid_instance_f32::A1, arm_pid_instance_f32::A2, arm_pid_instance_f32::Kd, arm_pid_instance_f32::Ki, arm_pid_instance_f32::Kp, and arm_pid_instance_f32::state.
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:09:49 pm
(https://i.imgur.com/9DkYvjx.png)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:11:55 pm
(https://i.imgur.com/iY4emwh.png)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:14:06 pm
(https://i.imgur.com/NCQjX76.png)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:16:32 pm
(https://i.imgur.com/cHNgQ76.png)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:19:14 pm
(https://i.imgur.com/vC4iRSC.png)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:20:40 pm
(https://i.imgur.com/Pon7Osf.png)
Title: Re: STM32F1 CMSIS DSP PID Motor Control
Post by: tha on July 23, 2021, 02:22:08 pm
(https://i.imgur.com/Vj8Vh8d.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 08:18:53 am
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__clarke.html

(https://i.imgur.com/qRA8WnT.png)

Description

Forward Clarke transform แปลง the instantaneous stator phases ลงใน a two-coordinate time invariant vector. โดยทั่วไป the Clarke transform ใช้ three-phase currents Ia, Ib and Ic คำนวณกระแสใน the two-phase orthogonal stator axis Ialpha and Ibeta. เมื่อ Ialpha ถูกซ้อนกับ Ia ดังแสดงในรูปข้างล่าง

     (https://i.imgur.com/TqcivBV.png)

และ Ia + Ib + Ic = 0, ในเงื่อนไขนี้ Ialpha and Ibeta สามารถถูกคำนวณโดยใช้เฉพาะ Ia and Ib.

The function ทำงานบน a single sample of data และแต่ละการเรียกถึง the function คืนกลับค่า the processed output. The library จัดให้มีฟังชั่นที่แยกกันสำหรับ Q31 and floating-point data types.

Algorithm

       (https://i.imgur.com/IOLr0TO.png)

โดยที่ Ia and Ib เป็น the instantaneous stator phases และ pIalpha and pIbeta คือ the two coordinates of time invariant vector.

Fixed-Point Behavior

ต้องใช้ความระมัดระวังเมื่อใช้ the Q31 version of the Clarke transform. โดยเฉพาะอย่างยิ่ง, the overflow and saturation behavior of the accumulator used ต้องถูกพิจารณา. อ้างอิงถึง the function specific documentation  ข้างล่างสำหรับแนวทางการใช้งาน.

ปล. ลองดูที่นี่พอจะเข้าใจไหม ไม่ยากนะ ไล่ดูในไฟล์ arm_math.h ก็ได้
      https://www.blockdit.com/posts/5ef8b0e52e64230ca5bc23b8 (https://www.blockdit.com/posts/5ef8b0e52e64230ca5bc23b8)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 08:40:24 am
(https://i.imgur.com/A8PYOpl.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 08:45:57 am
(https://i.imgur.com/iotseqC.png)

Scaling and Overflow Behavior:

The function ถูกจัดให้มีใช้โดยใช้ an internal 32-bit accumulator. The accumulator รักษา 1.31 format โดยการตัด lower 31 bits of the intermediate multiplication ใน 2.62 format. มี saturation บน the addition, ดังนั้นไม่มีความเสี่ยงของ overflow.

References __QADD().
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 09:59:32 am
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__inv__clarke.html

(https://i.imgur.com/CkHtCKR.png)

Description

Inverse Clarke transform แปลง the two-coordinate time invariant vector ไปเป็น instantaneous stator phases.

The function ทำงานบน a single sample of data และแต่ละการเรียกถึง the function คืนกลับค่า the processed output. The library จัดให้มีฟังชั่นที่แยกกันสำหรับ Q31 and floating-point data types.

Algorithm

        (https://i.imgur.com/RjlnaQ5.png)

โดยที่ pIa and pIb เป็น the instantaneous stator phases และ Ialpha and Ibeta เป็น the two coordinates of time invariant vector.

Fixed-Point Behavior

ต้องใช้ความระมัดระวังเมื่อใช้ the Q31 version of the Clarke transform. โดยเฉพาะอย่างยิ่ง, the overflow and saturation behavior of the accumulator used ต้องถูกพิจารณา. อ้างอิงถึง the function specific documentation  ข้างล่างสำหรับแนวทางการใช้งาน.
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 10:01:44 am
(https://i.imgur.com/2Wu2diF.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 10:03:25 am
(https://i.imgur.com/dwWlUDp.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 01:07:34 pm
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__park.html

(https://i.imgur.com/mgin2ul.png)

Description

Forward Park transform จะแปลง the input two-coordinate vector ไปเป็น flux and torque components. The Park transform สามารถถูกใช้เพื่อให้เข้าใจ the transformation ของ the Ialpha and the Ibeta currents จากที่อยู่กับที่ไปเป็น the moving reference frame และควบคุมความสัมพันธ์เชิงพื้นที่ระหว่าง the stator vector current และ rotor flux vector. ถ้าเราพิจารณา the d axis อยู่ในแนวเดียวกับ the rotor flux, the diagram ข้างล่างแสดง the current vector และความสัมพันธ์จาก the two reference frames:

          (https://i.imgur.com/yOyavwa.png)

The function ทำงานบน a single sample of data และแต่ละการเรียกถึง the function คืนกลับค่า the processed output. The library จัดให้มีฟังชั่นที่แยกกันสำหรับ Q31 and floating-point data types.

Algorithm

                  (https://i.imgur.com/jAHEMiw.png)

โดยที่ Ialpha and Ibeta เป็น the stator vector components, pId and pIq เป็น rotor vector components และ cosVal and sinVal เป็น the cosine and sine values of theta (rotor flux position).

Fixed-Point Behavior

ต้องใช้ความระมัดระวังเมื่อใช้ the Q31 version of the Park transform. โดยเฉพาะอย่างยิ่ง, the overflow and saturation behavior of the accumulator used ต้องถูกพิจารณา. อ้างอิงถึง the function specific documentation  ข้างล่างสำหรับแนวทางการใช้งาน.
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 01:09:40 pm
(https://i.imgur.com/R5DtYHJ.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 01:12:33 pm
(https://i.imgur.com/tVXkQnh.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 02:08:52 pm
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__inv__park.html

(https://i.imgur.com/0n65xnP.png)

Description

Inverse Park transform แปลง the input flux and torque components ไปเป็น two-coordinate vector.

The function ทำงานบน a single sample of data และแต่ละการเรียกถึง the function คืนกลับค่า the processed output. The library จัดให้มีฟังชั่นที่แยกกันสำหรับ Q31 and floating-point data types.

Algorithm

                 (https://i.imgur.com/8Nv23OY.png)                 

โดยที่ Ialpha and Ibeta เป็น the stator vector components, pId and pIq เป็น rotor vector components และ cosVal and sinVal เป็น the cosine and sine values of theta (rotor flux position).

Fixed-Point Behavior

ต้องใช้ความระมัดระวังเมื่อใช้ the Q31 version of the Park transform. โดยเฉพาะอย่างยิ่ง, the overflow and saturation behavior of the accumulator used ต้องถูกพิจารณา. อ้างอิงถึง the function specific documentation  ข้างล่างสำหรับแนวทางการใช้งาน.
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 02:12:16 pm
(https://i.imgur.com/qBCEFq9.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 02:14:19 pm
(https://i.imgur.com/CywaczA.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 03:03:54 pm
file:///D:/System%20Workbench/STM32CubeF1-master/Drivers/CMSIS/docs/DSP/html/group__SinCos.html

(https://i.imgur.com/XpIFFgb.png)

Description

คำนวณ the trigonometric sine and cosine values โดยใช้การรวมของ table lookup และ linear interpolation. มี separate functions สำหรับ Q31 และ floating-point data types. The input ไปยัง the floating-point version อยู่ในองศาในขณะที่ the fixed-point Q31 มี a scaled input ที่มี the range [-1 0.9999] แม็บกับ [-180 +180] degrees.

The floating point function ยอมให้ค่าที่อยู่นอกย่านปกติอีกด้วย. เมื่อสิ่งนี้เกิดขึ้น, the function จะใช้เวลาพิเศษเพื่อปรับ the input value เป็น the range of [-180 180].

ผลลัพธ์มีความถูกต้องถึง 5 หลักหลังจุดทศนิยม

การใช้งานจะขึ้นอยู่กับ table lookup โดยใช้ 360 values พร้อมกันกับ linear interpolation. ขั้นตอนการใช้คือ:
   1. การคำนวณของ the nearest integer table index.
   2. คำนวณ the fractional portion (fract) of the input.
   3. ดึงค่าที่ตรงกับ index จาก sine table ไปยัง y0 และค่าจาก index+1 ไปยัง y1 อีกด้วย.
   4. Sine value ถูกคำนวณอย่าง *psinVal = y0 + (fract * (y1 - y0)).
   5. ดึงค่าที่ตรงกับ index จาก cosine table ไปยัง y0 และค่าจาก index+1 ไปยัง y1 อีกด้วย.
   6. Cosine value ถูกคำนวณอย่าง *pcosVal = y0 + (fract * (y1 - y0)).
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 03:05:33 pm
(https://i.imgur.com/cwm6wwW.png)
Title: Re: STM32F1 CMSIS DSP Controller Functions
Post by: tha on July 24, 2021, 03:07:21 pm
(https://i.imgur.com/xCNdzq9.png)